jmpews / Dobby

a lightweight, multi-platform, multi-architecture hook framework.
Apache License 2.0
3.88k stars 794 forks source link

x86架构中hook函数崩溃 #255

Open lbwengineer opened 5 months ago

lbwengineer commented 5 months ago

函数反汇编代码如下: LOAD:0601D698 push ebx LOAD:0601D699 push esi LOAD:0601D69A push eax LOAD:0601D69B call $+5 LOAD:0601D6A0 pop ebx LOAD:0601D6A1 add ebx, (offset qword_9B277AC - offset loc_601D6A0) LOAD:0601D6A7 mov esi, [esp+0Ch+arg_0] dobby里,一个jmp指令占5个字节,所以call $+5指令被覆盖了,然后保存的时候转换指令错误。 call $+5和pop ebx这两行指令应该作为一起使用的目的是为了获取0601D6A0这个地址,然后用这个地址获取相对偏移量的常量,dobby只是简单的转换了call $+5这行指令但是没有结合pop ebx的意义一起考虑,导致获取到的ebx值不正确

lbwengineer commented 5 months ago

我非常想吐槽一下,dobby用来做inline hook实在是有点多问题,我的一个线上项目使用了dobby的DobbyHook经常出现莫名其妙的卡死问题,还定位不到问题