c - 有没有可靠的方法来获取 Valgrind 工具中包装函数的调用位置?

标签 c cross-platform valgrind instrumentation

我正在编写一个 valgrind 工具,作为其检测的一部分,使用 valgrind 提供的函数替换机制替换某些函数调用。替换函数立即处理参数并使用客户端请求机制调用工具代码。问题是,一旦我进入该工具,我想知道调用替换函数的位置,这样我就可以使用它来准确地向用户报告结果。但我找不到可靠的跨平台方法来做到这一点。到目前为止,我已经让它在 Linux 上工作了,方法是检测每个 AbiHint,如果它似乎位于用户代码位置,则将其地址存储在工具内存中,然后在我们进入替换调用的工具代码时拾取该地址功能。但根据我所读到的内容,我将无法依赖这些 AbiHints 跨平台,而且无论如何,它看起来都是一个很糟糕的、脆弱的解决方案。有什么好的办法吗?

最佳答案

工具向用户报告错误,使用 pub_tool_errormgr.h 中提供的函数 这些将报告 guest 堆栈跟踪,该跟踪应该给出 调用了替换的函数。 如果需要,您还可以使用 pub_tool_execontext.h 中的函数直接获取 guest 堆栈跟踪。

关于c - 有没有可靠的方法来获取 Valgrind 工具中包装函数的调用位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35674614/

相关文章:

c++ - 在单独的线程 Qt 中渲染屏幕外小部件

更正 C 中自定义整数类型的格式说明符以确保可移植性

c++ - std::remove_copy_if_ valgrind block 中的字节可能在丢失记录中丢失

c++ - 当我的代码仅请求一个内存分配时,为什么valgrind报告两个内存分配?

android - 构建 Android 应用以在 JRE 中运行

c - 如何通过优化标志追踪代码行为不同的原因

c - 将嗅探器的转储输出到 C 中的外部文件

c - 如何仅打印字符串的第一部分

javascript - 将 Node Chat 服务器与 ChucK 链接以获得声音

swift - 如何使用Swift跨平台编写png图片