如何获取启动线程的方法或函数地址?
Posted
技术标签:
【中文标题】如何获取启动线程的方法或函数地址?【英文标题】:How to the get method or function adress which launched a thread? 【发布时间】:2015-07-18 10:31:49 【问题描述】:我想获取运行由其线程 ID 标识的线程的函数/方法的地址或名称。
如何使用 Windows API 做到这一点?我正在使用win7 x64。 我尝试在 windows api 中查找文档失败了...
【问题讨论】:
我感觉信息没有存储在任何地方 - 在调试器 [或足够称职的进程查看器] 中,您可能可以向下钻取堆栈,直到找到第一个调用,但除此之外, “原始线程起始地址”没有被存储[它肯定不在我熟悉的任何线程库代码中] 当然,如果它是您的软件,您可以随时将 std::thread 包装到另一个包含额外信息的对象中... 跟踪很混乱。无论用于存储名称/线程 ID 映射的容器都需要一个锁,以便可以安全地执行线程创建/终止时的插入/删除。锁必须在迭代时被保留。存在返回过时信息的危险。我会非常努力地不按照你的建议去做。 当然可以。就像我说的,遍历堆栈,你最终会找到对 MS 提供的线程创建函数的调用,该函数调用了线程启动函数。但是没有公开可用的 API,您必须对 CreateThread 调用进行逆向工程或检测。 函数名称甚至不会保留在可执行文件中(调试版本除外),因此您要求的是不可能的。编写你自己的 CreateThread 包装器,它需要一个字符串来与线程相关联。 【参考方案1】:您需要实现此功能,因为 Windows API 不提供它。
【讨论】:
以上是关于如何获取启动线程的方法或函数地址?的主要内容,如果未能解决你的问题,请参考以下文章