如何实现'包装功能/功能'手动?

时间:2016-03-09 05:42:33

标签: c

让我们先看看包装函数是什么,例如:

https://en.wikipedia.org/wiki/Wrapper_function(也值得一看)

https://goo.gl/nGiMkl

- 换行符号

使用符号的包装函数。任何未定义的符号引用都将解析为__wrap_symbol。对__real_symbol的任何未定义引用都将解析为符号。这可用于为系统功能提供包装器。包装函数应该被称为__wrap_symbol。如果希望调用系统函数,则应调用__real_symbol。这是一个简单的例子:

void *
__wrap_malloc (int c)
{
  printf ("malloc called with %ld\n", c);
  return __real_malloc (c);
}

如果使用--wrap malloc将其他代码与此文件链接,则对malloc的所有调用都将调用函数__wrap_malloc__real_malloc中对__wrap_malloc的调用将调用真正的malloc函数。您可能还希望提供__real_malloc函数,这样没有--wrap选项的链接就会成功。如果您这样做,则不应将__real_malloc的定义放在与__wrap_malloc相同的文件中;如果这样做,汇编器可以在链接器有机会将其包装到malloc之前解析调用。

问题陈述

  1. Wrapper是编译器
  2. 提供的功能
  3. 在我的项目中,我需要实现类似的需要包装函数的程序。但我的项目编译器使用(Wind River Diab编译器)不支持包装函数
  4. 所以真正的问题是我可以用不支持包装函数/功能的编译器实现类似的功能。我可以手动实现包装函数
  5. 完成项目仅限于 C 语言

    PS:问题与malloc()无关。这只是一个例子。

0 个答案:

没有答案