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

测试代码:

	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 处

机器码对照:

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

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

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

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

插画ID:91687652


"The unexamined life is not worth living."