整理自己hook汇编代码的经验。
1、现场的保存和恢复
之前是逐条push和pop,后来在网上看到更简洁的方法:pushad(机器码是:0x60),popad(机器码是0x61),一次性保存和恢复所有寄存器。
2、跳转
有3种方式,一种是call 偏移量,这种方式占5byte,但是需要计算偏移量,本人懒,不到不得已,不想采用此方式。
第二种,call [地址],这种方式占6byte,机器码是:FF 15 地址,实际要call的地址是保存在[地址]这个内存里面的。
第三种,mov eax,地址,call eax,这种方式占7byte。
第四种,mov eax,地址,jmp eax。这种方式占用7byte。使用这种方式时,需要找到一处原代码正好是7byte的指令(可以是多条),跳转后再跳回来之前一定要补上被占用的原代码。
其中,第二种方式用起来较为方便。
最新评论