一个汇编代码小实验

First Post:

Last Update:

这几天闲着没事,突然想起自己已经把汇编忘得差不多了,于是重新拿起汇编做了个小实验

测试代码:

1
2
3
4
5
6
7
push offset Counter
mov eax,esp
mov eax,[eax]
push $+6
jmp eax
leave
INVOKE ExitProcess,0

关闭随机地址后,0x40206C:leave;$+6=0x40206B;jmp相当于call入一个函数,该函数将使用ret返回到 $+6 处

机器码对照:

1
2
0x40206A jmp eax:FF E0
0x40206C leave:C9

于是取址之后拿到 E0 这个机器码后,译码器发现它应该有一个操作数的,于是向后把 C9 带上了,最后就执行E0 C9去了

不过x32dbg会在滚动之后又将汇编代码识别回 leave 且看上去真的执行了,只是观察寄存器后发现并没有执行leave,因此姑且认为,还是以IDA动调分析的汇编代码为准较好

另外补充一句:译码器在遇到不认识的机器码时,会直接崩溃,这一点经过笔者尝试得到了验证

插画ID:91687652