当前位置: 代码迷 >> 汇编语言 >> 帮小弟我看看汇编代码,为什么这样写
  详细解决方案

帮小弟我看看汇编代码,为什么这样写

热度:114   发布时间:2016-05-02 04:32:50.0
帮我看看汇编代码,为什么这样写
NewMessageBoxWCode[0] = 0xe9;         //jmp指令,NewMessageBoxWCode是一个5个元素的单字节数组
 _asm
 {
  lea eax, MyMessageBoxW 
  mov ebx, pfMessageBoxW
  sub eax, ebx 
  sub eax, 5
  mov dword ptr[NewMessageBoxWCode + 1], eax
 }

我知道最终NewMessageBoxWCode的元素是:jmp指令、自己函数的地址(4字节),一共5字节,但不知道上面汇编代码里取得自己函数的地址为什么是这样写的。

------解决方案--------------------
引用
1、为什么要用自己的函数地址减去原函数地址呢?lea指令不是已经获取到了自己的函数地址吗?
 上面不是说了,jmp 指令不能直接使用目标地址的,它用的是偏移?pfMessageboxW 是原函数地址?那上面的代码是被填到原函数开始处的?


引用
2、再减5个字节,是要把jmp指令放到函数地址前面吗?如果函数地址前5个字节是其它的重要数据,被覆盖了怎么办?
 jmp 指令里的偏移是目标地址到 jmp 指令下一个指令,不是基于 jmp 指令自身,所以,如果 pfMessageBoxW 指向 jmp 指令的话,就要减去 5 这个 jmp 指令所占用的长度。
  相关解决方案