忽略内部链接(静态声明)并调用函数?

时间:2017-05-27 00:57:30

标签: c linker clang

我正在尝试调试其他人的库。虽然不在标题中,但该库包含一个C风格的符号_library_internal_function,我想从实际上是一个测试工具中使用它。

在很多情况下,当我错过标题时,我可以使用extern来“自己制作”:

extern int library_internal_function(int);

int test_library_function() {
   return library_internal_function(42);
}

但是在这种情况下,我收到一个错误:

Undefined symbols for architecture x86_64:
  "_library_internal_function", referenced from:
      _test_library_function in MyCode.o
ld: symbol(s) not found for architecture x86_64

我认为内部函数必须声明为static int library_internal_function(int),即具有内部链接。所以我期待这个错误。

但是我想知道是否有办法以某种方式覆盖它,并绕过原始的链接选项。该符号绝对存在于库中(它没有内联或优化);我可以以某种方式强迫clang的链接器找到并使用内部函数吗?

重申:这不是生产代码。我只是想尝试调试一些东西,如果我可以直接调用函数,而不是通过“受害者”库的公共API以迂回方式调用函数,那将非常有用。

0 个答案:

没有答案