今天看到一篇关于Thunk技术的文章,特转过来。
这里想说的是:代码中的关键点为用指令jmp pFunc跳转到你想要执行的函数pFunc。
指令“jmp xxxx”占5个字节,代码中用了个一字节对齐的结构体struct Thunk ,
当然也可以用 unsigned char code[5]; 说另一个关键点就是地址计算了,jmp xxxx指令用了相对跳转地址,
相对地址 = 要跳转函数的地址 - “jmp xxxx”指令的下一条指令的地址。
下面代码中的class C 只有m_thunk一个数据成员,没有虚函数和在m_thunk前没有声明别的数据成员,
因此相对地址 = pFunc - [ (int)this + sizeof(struct Thunk) ]
如上所述,若有虚函数和在m_thunk前声明了别的数据成员,则相对地址的计算要做修改。
:)本来画个表会说得比较清楚,但本人嫌麻烦,就作罢了!
/下面是所转的文章