iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

接下來是將暫存器內的值放入Stack當中,也就是放入RBP的相對位址當中。

https://ithelp.ithome.com.tw/upload/images/20240923/20169016HveonD2xPL.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016bHoIDcWqu7.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016QnSyV0pBiA.png

在Windows和Ubuntu的環境底下,下一行做的事情是一樣的,將RAX的值放入RBP-0x10的相對位址,也就是將最一開始的 "HelloWor" 放入RBP-0x10的位址。
https://ithelp.ithome.com.tw/upload/images/20240923/20169016yU8puB5CTg.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016QMG93BfGVV.png
IDA需要花一點時間理解,我們看到RBP的Address顯示7FFFFCC20,在這邊他儲存於-10的位址,也就是說在7FFFFCC20-10=7FFFFCC10的位址會放置RAX的值,我們看向右下角Stack當中的7FFFFCC10值就等同於RAX的值。

再下一行就可以看到程式將後面的ld!給送進去了,ld!對應的ASCII code是0x6c 0x64 0x21,而考慮到小端序的問題,在程式中會寫成0x21 0x64 0x21,隨後放入RBP-0x8的位址。
https://ithelp.ithome.com.tw/upload/images/20240923/20169016ifmyzuddUw.png

放入字串後的RBP會長這樣。
https://ithelp.ithome.com.tw/upload/images/20240923/201690166pMrxJY81y.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016EEd8aJIsU1.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016x28iG36nmg.png
在IDA中會更清楚的顯示出來,0x7FFFFCC10的位址就是紀錄一開始的RAX值,而後面的0x7FFFFCC18就是放後來的"ld!",下面這張可以很清楚的知道記憶體擺放方式,通過剛剛說明的小端序,結合IDA最後兩位的位址來展示,0x10到0x17的地方是RAX的空間,0x18開始到0x1A是"ld!",這一點跳到IDA的Stack address的位址可以更清楚的看到。
https://ithelp.ithome.com.tw/upload/images/20240923/201690168f2M8BQGdg.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016dhZcHatqeR.png

下一行是將0放到RBP-4,而這個0就是迴圈當中的i=0,IDA因為變化比較難發現,所以我把放入0和沒放入之前做對比。
https://ithelp.ithome.com.tw/upload/images/20240923/20169016x6FooviMlT.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016tO02JrSjQX.png
https://ithelp.ithome.com.tw/upload/images/20240923/20169016db00jYloWN.png
https://ithelp.ithome.com.tw/upload/images/20240923/201690160Qc9J9PPiL.png


上一篇
位元組順序介紹
下一篇
Reverse 迴圈
系列文
從0開始的打Pwn教學14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言