跳转指令公式计算 HOOK
注:不要HOOK 函数里可能会被跳转的地址, 不要HOOK 字节中包含函数调用的地址 如 HOOK的地址里有 CALL EDX 等
x86
- JMP计算公式
- 目标地址-当前地址-5 = 机器码E9后面所跟的32位数
- JE计算公式
- 目标地址-当前地址-6 = 机器码0F 84后面所跟的32位数
- JNE计算公式
- 目标地址-当前地址-6 = 机器码0F 85后面所跟的32位数
- CALL计算公式
- 目标地址-下条指令的地址=机器码E8后面所跟的32位数 ret十六进制码 C3
x64
jmp计算公式
1 第一种方法 jmp qword ptr[ 保存目标地址的指针地址]
保存目标地址的指针地址-下条指令的地址= 特征码 FF 25 后面跟着的32位数
(注意保存目标地址的指针地址 和 下条指令地址 都必须在一个PE段(section)) 而且 保存目标地址的指针地址 必须在 下条指令的地址下面
计算下条指令方法就是 FF 25 32位数 总共 六个字节
保存目标地址的指针地址 必须是 八个字节
总共 14 个字节
2 第二种方法
push r15
mov r15, 目标地址
jmp r15
到目标地址一系列操作后 还原 r15 pop
pop r15
3 第三种方法
mov r15,目标地址
push r15
ret
个人建议 使用 第一种方法
CALL地址计算 当前地址4字节 + E8 后面的4字节 + 5