【发布时间】:2013-09-30 13:21:42
【问题描述】:
1.
TEST EAX,EAX
JNZ SHORT program.00407190
2.
XOR EAX,EAX
JNZ SHORT program.00407190
如果我错了,请纠正我。谢谢! :)
据我目前的理解:
JNZ不等于0为跳转,是否跳转取决于ZF是否设置为1。如果为 1,则不会跳转。否则,它会跳。
根据我对代码 #1 的理解,TEST EAX,EAX 将检查它是否为零。如果不等于0(ZF为0),会跳转到地址00407190。
对于代码 #2 XOR EAX,EAX 会将 EAX 寄存器设置为 0。它是否设置了任何标志?如果不是,JNZ指令如何判断是否跳转?
最后,人们为什么要检查EAX 是否为0?请帮助我更简单,更详细的解释,我还是一个初学者。
【问题讨论】:
-
至于为什么要检查
EAX是否为0;这取决于上下文。假设您正在编写一个 Windows 应用程序并调用了一些 WinAPI 函数,例如CreateWindow或HeapAlloc或其他什么。函数的结果(无论是窗口句柄、指向已分配内存块的指针还是其他)将在EAX中返回,检查结果是零(无效)还是非零是有意义的(有效),以确定如何在您的程序中进行。 -
谢谢!这对于初学者来说绝对是一个很好的例子。
-
x86 Assembly - 'testl' eax against eax? 可能重复
test eax,stackoverflow.com/questions/1396527/… 可能重复xor
标签: assembly x86 reverse-engineering