CALL的参数其实就是在调用CALL的时候所需要的运行环境,看寄存器中的提示,有两个红色,说明当我们调用CALL的时候,它使用了寄存器中的两个地址。那么这个就是CALL的 运行环境了,也就是说,只要在我们调用这个CALL的时候,寄存器EAX中有值00D51FE4和寄存器ECX中有值0042ABE4就可以运行。这里还有一个特殊 情况,这里我先卖个关子。
根据call执行前后的寄存器变化情况来判断
我们首先要判断,那条语句对CALL产生了作用,那么如何判断呢?
我目前有三个途径可以判断,一是根据断点判断,二是根据寄存器判断,三是跟踪判断。
好的,这里我们先说下断点判断。
在上面四条语句中全部下断。并让程序恢复运行状态。
好的,再次点击“冰系”我们发现了一个问题。就是前面两条命令并没有参与CALL的调用动作,因为直接跳过了,并没有在语句中断下。于此判断,这两个语句跟这里的CALL无关。
OK,既然确定了CALL的因素,我们就来分析,应该如何去调用它。
下面三个图大家看一下,我给大家一个对比
好,通过上面的图,大家可以发现当 命令mov edx,1执行的时候,调用了寄存器中EAX ECX EDX中的值CALL 00452DF8 执行的之后只调用了EDX。也就是说,这里的EDX是影响CALL的因素。RETN EAX ECX EDX 这里返回的时候也是返回了三个值,正好跟EDX的因素有关系。现在这样就确定了,EAX,ECX,EDX就是CALL的因素。