我在执行x86指令时,难以确定特定寄存器存储的适当地址和值。
我尝试使用分配给这两个寄存器的初始值执行以下指令:
eax = 0x40000, ebx = 0x100000
下面每一行左侧列出了一个执行的命令。然后,每一行中包含目标寄存器地址的答案,最后是我想到的值/地址。
每一行都会影响寄存器的后续值;例如,在第一行中,eax
改变了 ebx
的地址,所以 ebx
不再指向 0x100000 值:
mov [ebx], eax -> answer: [0x100000] 0x40000
lea esp, [ebx+eax*4] -> answer: esp [0x440000]
xor edx, edx -> answer: edx 0x00000
sub edx, eax -> answer: edx 0x40000
adc ebx, eax -> answer: ebx 0x80000
shl eax, 13 -> answer: eax 0x100000000
add ebx, eax -> answer: ebx 0x100040000
push ebx -> answer: esp 0x100040000
sar eax, 31 -> answer: eax 0x00000002
push eax -> answer: esp 0x00000002
mov eax, [esp+4] -> answer: eax 0x00000202
not eax -> answer: ecx 0x2
sub eax, [esp] -> answer: eax 0x200
我对以下命令有特别的问题:
lea
,not
和sar
。我不确定xor
命令是否在xor edx, edx
命令中将寄存器设置为“0”。如果您能纠正我的结果并解释其中棘手的部分/命令,我将非常感激。
附注:要查看表格中的完整操作列表,请参见照片。 x86操作表
[]
表示内存引用。mov [ebx], eax
将eax
的值放置在ebx
指向的内存位置;它不会将ebx
设置为eax
的值。 - zneaklea
的信息,那么您很可能永远不会找到这个问题,因为它没有围绕这个词语进行表述。Stack Overflow 对问题的措辞非常严格,我们都明白您希望我们检查您的结果,但是当前的文档价值(如当前措辞)很低,人们可能不会回答。 - zneak