2015-10-12 60 views
0

假設堆棧如下,其中所述串/ bin/sh的地址是0×11: enter image description here

movl %esi, 0x8(%esi)後我覺得值加載形式存儲器地址%esi將被移動到0x8(%esi)(這是定義movl)。所以字符串/bin/sh將被放在地址0x8(%esi)。但結果是11被放在該地址。在我看來,如果我們想把11放在那個地址,我們應該使用leal指令,因爲leal沒有取消引用(只是一個地址不是值)。

+1

http://stackoverflow.com/questions/13517083/assembly-leal-and-movl-difference – jolati

回答

1

movl %esi, 0x8(%esi)是內存移動的註冊表。第一個操作數是一個寄存器,它不引用內存。

另一方面,leal %esi, 0x8(%esi)甚至不存在,因爲您不能取寄存器的地址,也不能寫入內存。

如果你想複製記憶你通常需要經過一個寄存器,如:

movl (%esi), %eax 
movl %eax, 0x8(%esi)