从hook的并发症理解x64指令格式

hook的并发症

可以理解成一个有意思的问题,假如地址 addr1 上有一个函数func1,长度为len, 将这个函数 整体换一个位置,挪到 addr2, 移动之后的函数成为func2

1
memcpy(addr2 ,addr1,len );

原来调用 func1 语法是:

1
func1(arg1 , arg2 , arg3);

问:
现在用如下的方式调用 func2 是否会发生异常?

1
func2(arg1 , arg2 , arg3);

假如把 func1 的开头 修改为特定的 shellcode,改成 跳转+ 目标跳转地址的格式,就是传统的 inline hook, 但是这种hook将 原来函数的指令 挪了位置,再次调用有的时候会崩溃, 有的时候称这种情况为 hook的 并发症。

指令格式

指令包括可选的指令前缀 (in any order),主要操作码字节 (up to three bytes),由ModR / M字节以及有时由SIB(Scale-Index-Base)组成的寻址形式说明符 (if required) ,位移字段 (if required)和立即数据字段 (if required)。

image

Instruction Prefixes

image

opcode

image

TODO

image

-->