接下來是將暫存器內的值放入Stack當中,也就是放入RBP的相對位址當中。
在Windows和Ubuntu的環境底下,下一行做的事情是一樣的,將RAX的值放入RBP-0x10的相對位址,也就是將最一開始的 "HelloWor" 放入RBP-0x10的位址。
IDA需要花一點時間理解,我們看到RBP的Address顯示7FFFFCC20,在這邊他儲存於-10的位址,也就是說在7FFFFCC20-10=7FFFFCC10的位址會放置RAX的值,我們看向右下角Stack當中的7FFFFCC10值就等同於RAX的值。
再下一行就可以看到程式將後面的ld!給送進去了,ld!對應的ASCII code是0x6c 0x64 0x21,而考慮到小端序的問題,在程式中會寫成0x21 0x64 0x21,隨後放入RBP-0x8的位址。
放入字串後的RBP會長這樣。
在IDA中會更清楚的顯示出來,0x7FFFFCC10的位址就是紀錄一開始的RAX值,而後面的0x7FFFFCC18就是放後來的"ld!",下面這張可以很清楚的知道記憶體擺放方式,通過剛剛說明的小端序,結合IDA最後兩位的位址來展示,0x10到0x17的地方是RAX的空間,0x18開始到0x1A是"ld!",這一點跳到IDA的Stack address的位址可以更清楚的看到。
下一行是將0放到RBP-4,而這個0就是迴圈當中的i=0,IDA因為變化比較難發現,所以我把放入0和沒放入之前做對比。