C 如何用自定义代码包装库函数?

C 如何用自定义代码包装库函数?,c,function,overriding,C,Function,Overriding,我有一个实现malloc的库。我想用一个自定义的malloc函数重写这个函数,该函数执行一些操作,然后调用库的malloc函数 如何重新定义符号malloc而不丢失库中的函数?使用库函数的名称创建新函数不是一个好的做法。如果您想创建这样一个函数,那么新函数可以正常工作,但不能使用库函数。如果要创建自己版本的printf(),可以这样做,但不能使用原始的printf()函数,因为您正在重写它。使用库函数的名称创建新函数不是一个好做法。如果您想创建这样一个函数,那么新函数可以正常工作,但不能使用库函

我有一个实现
malloc
的库。我想用一个自定义的malloc函数重写这个函数,该函数执行一些操作,然后调用库的malloc函数


如何重新定义符号
malloc
而不丢失库中的函数?

使用库函数的名称创建新函数不是一个好的做法。如果您想创建这样一个函数,那么新函数可以正常工作,但不能使用库函数。如果要创建自己版本的printf(),可以这样做,但不能使用原始的printf()函数,因为您正在重写它。

使用库函数的名称创建新函数不是一个好做法。如果您想创建这样一个函数,那么新函数可以正常工作,但不能使用库函数。如果要创建自己版本的printf(),可以这样做,但不能使用原始的printf()函数,因为您正在重写它。

使用库函数的名称创建新函数不是一个好做法。如果您想创建这样一个函数,那么新函数可以正常工作,但不能使用库函数。如果要创建自己版本的printf(),可以这样做,但不能使用原始的printf()函数,因为您正在重写它。

使用库函数的名称创建新函数不是一个好做法。如果您想创建这样一个函数,那么新函数可以正常工作,但不能使用库函数。如果您想创建自己版本的printf(),您可以这样做,但不能使用原始printf()函数,因为您正在重写它。

GNU链接器提供了
--wrap symbol
标志来围绕现有函数包装自定义函数

正如您在此处看到的,最后一个标志:

对符号使用包装函数。对
符号
的任何未定义引用将解析为
\uuu wrap\u symbol
。对
\uu real\u symbol
的任何未定义引用将解析为
symbol
。这可用于为系统函数提供包装器。应该调用包装函数
\uuwrap\u symbol
。如果希望调用系统功能,则应调用
\uuu real\u symbol
。以下是一个简单的例子:

void *
__wrap_malloc (int c) {
    printf ("malloc called with %ld\n", c);
    return __real_malloc (c);
}
如果使用
--wrap malloc
将其他代码链接到此文件,则对
malloc
的所有调用都将调用函数
\uuuwrap\umalloc
。在
\uu wrap\u malloc
中调用
\uu real\u malloc
将调用real
malloc
函数。您可能还希望提供一个uuu real_malloc函数,这样没有
--wrap
选项的链接将成功。如果这样做,则不应将
\uuuu real\u malloc
的定义与\uuuu wrap\u malloc放在同一个文件中;如果您这样做,汇编程序可能会在链接器有机会将调用包装到malloc之前解析调用


GNU链接器提供了
--wrap symbol
标志来围绕现有函数包装自定义函数

正如您在此处看到的,最后一个标志:

对符号使用包装函数。对
符号
的任何未定义引用将解析为
\uuu wrap\u symbol
。对
\uu real\u symbol
的任何未定义引用将解析为
symbol
。这可用于为系统函数提供包装器。应该调用包装函数
\uuwrap\u symbol
。如果希望调用系统功能,则应调用
\uuu real\u symbol
。以下是一个简单的例子:

void *
__wrap_malloc (int c) {
    printf ("malloc called with %ld\n", c);
    return __real_malloc (c);
}
如果使用
--wrap malloc
将其他代码链接到此文件,则对
malloc
的所有调用都将调用函数
\uuuwrap\umalloc
。在
\uu wrap\u malloc
中调用
\uu real\u malloc
将调用real
malloc
函数。您可能还希望提供一个uuu real_malloc函数,这样没有
--wrap
选项的链接将成功。如果这样做,则不应将
\uuuu real\u malloc
的定义与\uuuu wrap\u malloc放在同一个文件中;如果您这样做,汇编程序可能会在链接器有机会将调用包装到malloc之前解析调用


GNU链接器提供了
--wrap symbol
标志来围绕现有函数包装自定义函数

正如您在此处看到的,最后一个标志:

对符号使用包装函数。对
符号
的任何未定义引用将解析为
\uuu wrap\u symbol
。对
\uu real\u symbol
的任何未定义引用将解析为
symbol
。这可用于为系统函数提供包装器。应该调用包装函数
\uuwrap\u symbol
。如果希望调用系统功能,则应调用
\uuu real\u symbol
。以下是一个简单的例子:

void *
__wrap_malloc (int c) {
    printf ("malloc called with %ld\n", c);
    return __real_malloc (c);
}
如果使用
--wrap malloc
将其他代码链接到此文件,则对
malloc
的所有调用都将调用函数
\uuuwrap\umalloc
。在
\uu wrap\u malloc
中调用
\uu real\u malloc
将调用real
malloc
函数。您可能还希望提供一个uuu real_malloc函数,这样没有
--wrap
选项的链接将成功。如果这样做,则不应将
\uuuu real\u malloc
的定义与\uuuu wrap\u malloc放在同一个文件中;如果您这样做,汇编程序可能会在链接器有机会将调用包装到malloc之前解析调用


GNU链接器提供了
--wrap symbol
标志来围绕现有函数包装自定义函数

正如您在此处看到的,最后一个标志:

对符号使用包装函数。对
符号
的任何未定义引用将解析为
\uuu wrap\u symbol
。对
\uu real\u symbol
的任何未定义引用将解析为
symbol
。这可以用来公关