如何判断WinAPI的调用方?
如何判断WinAPI的调用方?例如:正在运行的进程abc.exe中,def.dll是该进程的模块之一,还可能有其他若干个dll模块。
abc.exe会调用MessageBoxA;def.dll也会调用MessageBoxA;其他模块也有可能调用MessageBoxA。
如何实现判断当前MessageBoxA的调用是来自abc.exe,还是来自def.dll,或是其他dll?
思路:
我想通过Hook MessageBoxA,根据堆栈返回值进行判断调用方,并打印出当前调用方的模块。
问题:
这种思路是否可行,如果可行,具体步骤是什么?还有没有其他思路? 完全可行,参考很多程序出错打印调用栈的操作,就可以知道了。
Hook确实是最容易想到也是最容易实现的,其他方法我也想不出来,期待更强的高手出现。 看堆栈找来源 HOOK,获取RSP的地址,然后读取那地址就能得到来源CALL地址了 如果你可以用调试环境的话,用Windbg给MessageBox打上断点,这样停下来的时候直接输入k看堆栈是不是最简单 思路可行,我曾经这么做过 yes2 发表于 2024-7-22 08:49
思路可行,我曾经这么做过
大佬给个示例代码参考呗。{:301_998:} 给不了,前东家的产品里加的东西,我自己没有留存。即使留存了也不能外泄,虽然是很简单的东西但是职业道德还是要的。
原理你自己不是知道了吗?根据堆栈返回值就可以了 可以使用CaptureStackBackTrace函数获取当前线程的调用堆栈信息。这个函数会返回一组指向调用堆栈上函数地址的指针。
使用SymFromAddr等符号解析函数,将函数地址转换为函数名称和模块名称。 已发私信,注意查收。
页:
[1]