还是上一次的abex' crackme #1,我们用OD附加看一下。
我们发现在调用这个MessageBox函数的时候,用了4个PUSH指令,我们在后面的注释中可以清楚的看到压入参数的内容。
如果我们将它还原成C语言的形式,是这样的:
我们可以清楚的看到汇编代码中压入参数的顺序和我们写代码时候的顺序恰恰是相反的。
这是因为栈内存结构先入后出的原则,如果要想让C代码中的参数正序弹出来,就必须汇编中逆序压进去。
此时,我们可以试着查看一下栈顶指针ESP的变化。
此时右边寄存器区域ESP:0019FF84
然后我们按F8,一直到第一个call.
此时ESP为0019FF74
相减相差0x10. 十进制相差16.