Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用g在Linux上使用Valgrind拦截全局函数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

根据 their example,我试图用Valgrind拦截一个函数. 在使用gcc构建时,我能够拦截全局函数,但是当我用g编译相同的代码时,拦截不起作用. 我应该指定的编译器标志有什么特别之处吗? 这是我的示例应用: #include <stdio.h> #include "valgrind.h" __attribute__ ((noinlinE)) void foo() { pri
@H_772_7@
@H_618_13@
根据 their example,我试图用Valgrind拦截一个函数.

在使用gcc构建时,我能够拦截全局函数,但是当我用g编译相同的代码时,拦截不起作用.

我应该指定的编译器标志有什么特别之处吗?

这是我的示例应用:

#include <stdio.h>
#include "valgrind.h"

__attribute__ ((noinlinE))
void foo()
{
    printf("inside foo\n");
}

void I_WRAP_SONAME_FNNAME_ZU(NONE,foo)()
{
   OrigFn fn;
   VALGRIND_GET_ORIG_FN(fn);
   printf("*** Before foo()\n");
   Call_FN_v_v(fn);
   printf("*** After foo()\n");
}

int main()
{
    foo();
    return 0;
}

使用GCC编译时,输出为:

但是当用g编译时,输出就是简单的

解决方法

G为没有extern“C”的函数做了名称修改.所以你应该找到一个受损的名称(例如使用NR_601_11845@对象)并在你的valgrind代码中使用它.或者您可以重写目标程序以使用extern“C”函数.

大佬总结

以上是大佬教程为你收集整理的使用g在Linux上使用Valgrind拦截全局函数全部内容,希望文章能够帮你解决使用g在Linux上使用Valgrind拦截全局函数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。