我正在编写一个 valgrind 工具,作为其检测的一部分,使用 valgrind 提供的函数替换机制替换某些函数调用。替换函数立即处理参数并使用客户端请求机制调用工具代码。问题是,一旦我进入该工具,我想知道调用替换函数的位置,这样我就可以使用它来准确地向用户报告结果。但我找不到可靠的跨平台方法来做到这一点。到目前为止,我已经让它在 Linux 上工作了,方法是检测每个 AbiHint,如果它似乎位于用户代码位置,则将其地址存储在工具内存中,然后在我们进入替换调用的工具代码时拾取该地址功能。但根据我所读到的内容,我将无法依赖这些 AbiHints 跨平台,而且无论如何,它看起来都是一个很糟糕的、脆弱的解决方案。有什么好的办法吗?
最佳答案
工具向用户报告错误,使用 pub_tool_errormgr.h
中提供的函数
这些将报告 guest 堆栈跟踪,该跟踪应该给出
调用了替换的函数。
如果需要,您还可以使用 pub_tool_execontext.h
中的函数直接获取 guest 堆栈跟踪。
关于c - 有没有可靠的方法来获取 Valgrind 工具中包装函数的调用位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674614/