• 标 题:一个值得注意的问题:关于硬件对编程的影响
  • 作 者:vcasm
  • 时 间:2004-12-31,14:37
  • 链 接:http://bbs.pediy.com

在给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处的代码