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字节,但不知道上面汇编代码里取得自己函数的地址为什么是这样写的。
------解决方案--------------------
上面不是说了,jmp 指令不能直接使用目标地址的,它用的是偏移?pfMessageboxW 是原函数地址?那上面的代码是被填到原函数开始处的?
jmp 指令里的偏移是目标地址到 jmp 指令下一个指令,不是基于 jmp 指令自身,所以,如果 pfMessageBoxW 指向 jmp 指令的话,就要减去 5 这个 jmp 指令所占用的长度。