阅读:1585回复:4
神奇的CPU???还是我人品问题__declspec(naked) VOID SsdtHookFunction() /* * 通用hook函数 */ { PUSER_SSDT_HOOK_ITEM userHook; //ULONG params; ULONG orgFunction; __asm { int 3; push ebp; mov ebp, esp; mov eax, [ebp + 8]; //inlinehook原始调用地址[参数1] mov orgFunction, eax; //??????????? xor eax, eax; int 3; mov eax, orgFunction; //??????????? push eax; call GetUserSsdtItem; //查表获取函数调用参数 int 3; mov eax, orgFunction; mov userHook, eax; } 在Windbg跟踪 mov orgFunction, eax; //??????????? xor eax, eax; int 3; mov eax, orgFunction; //??????????? 执行mov orgFunction, eax;后 dd ebp-4 居然和eax不同,晕倒 然后清0 eax,再写回刚才的值,居然不一样了 我郁闷啊?莫非我人品有问题 |
|
沙发#
发布于:2008-08-13 08:10
定义的堆栈变量有可能被优化掉,而直接使用寄存器.
查看编译后的汇编代码就知道什么原因了 |
|
|
板凳#
发布于:2008-08-13 22:47
经多方验证确实表明我人品问题,CPU是没有问题的
在于忘了开辟堆栈空间了 晕 sub esp,0x10 |
|
地板#
发布于:2008-08-14 11:03
人品问题,呵呵
|
|
|
地下室#
发布于:2008-08-31 10:14
代码有问题
你没有给你的局部变量留stack空间啊 空间不用自己算 你可以msdn一下一个大概叫__LOCAL_SIZE一类的宏.. =========================== 哦...自问自答了... 那我就是打酱油的..... |
|