这将需要一些背景。 我正在使用Detours来拦截系统调用。 对于那些不知道Detours是什么的人来说 – 这是一个把系统function调用redirect到绕行function的工具,它允许我们在实际系统调用之前和之后做任何我们想做的事情。 我想知道的是,如果有可能找出任何有关该系统调用的DLL /模块的任何信息? 是否有任何win32 APIfunction帮助我做到这一点?
让我们说traceapi.dll在kernel32.dll中对GetmodulefileNameW()进行系统调用。 Detour将拦截这个调用并将控制redirect到一个绕道函数(比如mine_GetmodulefileNameW())。 现在在mine_GetmodulefileNameW()里面,是否有可能发现这个调用来自traceapi?
Docker警告:无法从守护进程获取默认registry端点
Neo4j 3.0.4企业版试用版无法在Windows中启动
我如何使JDK成为默认的JRE?
监视Windows中的特定进程的内存和处理器使用情况?
find一个点下的所有窗口
使用第一个参数SystemProcessesAndThreads@R_226_4045@ion调用ZwQuerySystem@R_226_4045@ion 。 一旦你有返回的buf,将其转换为PSYTstem+PROCESS_@R_226_4045@ION并使用其字段来提取您的信息。
status = ZwQuerySystem@R_226_4045@ion ( SystemProcessesAndThreads@R_226_4045@ion,buf,bufsize,NULL); PSYstem_PROCESS_@R_226_4045@ION proc_info = (PSYstem_PROCESS_@R_226_4045@ION) buf; proc_info->ProcessName,which is a UNICODE_STRING will give you the calling process name.
请注意,我所说的结构和字段没有记录,并可能在将来的Windows版本中发生变化。 但是,我正在使用它,它在WIN XP及以上版本上正常工作。
我不知道Detours代码拥有多少个栈帧。 在调试器中很容易发现,有没有好的可能性。 这很容易,使用_ReturnAddress内在来获取调用者的地址。 VirtualQuery()获取基地址,将其转换为HMODULE并使用GetmoduleeFileName()。 那么,非绕道一:)
如果有Detours堆栈帧,那么它会变得更加困难。 如果存在FPO帧,StackWalk64()将跳过它们,危险。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。