在给VProtector除BUG的过程中发现了硬件的一个特点,想写出来给大家知道,免得以后有朋友因为这方面的问题阻碍了软件开发的过程
inter的CPU在从P4开始,cpu指令的调用有个细节和以往的cpu不一样,
我们在调用函数的时候 一般的流程是:
push 下个指令的地址
jmp 目标函数
而P4的cpu的过程不一样,调用过程如下:
jmp 目标函数
push 下个指令的地址
我们在设计利用堆栈执行指令的时候必须注意这个细节,比如call esp必须
要针对当前cpu的特点定位esp
对付这样的解决办法也找到
我发现 call [esp] 不会存在这样的问题
老的CPU上面执行call esp的过程:
假如 esp = 401000
那么 call esp 将会调用 400ffc处的代码 因为cpu首先将返回地址压栈入400ffc处 再进入esp的地址
P4的运行情况恰恰相反 调用的始终使esp处的代码