我有一个C++程序ProgramA,它是一个可执行文件,它有一个静态库LibraryB,而这个静态库又依赖于我的项目中没有编译的另一个静态库(实际上是libcurl)。
现在,在OSX上,这工作得很好。我确保链接了libcurl和ProgramA,并且LibraryB编译和ProgramA运行得很好。
然而,在Windows上,我一直收到链接错误:
error LNK2019: unresolved external symbol __imp_curl_global_init referenced in function
我已经反复检查是否将libcurl静态库链接到项目中。实际上,在Visu
我的问题
我正在尝试编写一个共享库(不是一个可执行文件,所以请不要告诉我使用-no-pie)与程序集和C一起使用单独的文件(不是内联程序集)。
我希望通过汇编代码中的全局偏移表访问C全局变量,因为调用的函数可以在任何其他共享库中定义。
我知道PLT/GOT文件,但我不知道如何告诉编译器正确地为链接器生成重新定位信息(语法是什么),以及如何告诉链接器使用该信息重新定位我的代码(链接器选项是什么)。
我的代码使用链接错误进行编译。
/bin/ld: tracer.o: relocation R_X86_64_PC32 against
/bin/ld: final link failed: bad
我见过一些版本的libc.so,当从命令行执行时,它将打印一个版本字符串,如下所示:
$ /lib/libc.so.6
GNU C Library (Buildrood) stable release version 2.30.
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTIBILITY or FITNESS FOR A
PARTI
在global.c文件中定义了一些全局变量,如下所示:
int globalvar;
我有一个头文件global.h将这个变量声明为extern
extern int globalVar;
现在我有了main.c,它与已编译的global.o (从global.c编译)链接,它具有打开(使用dlopen)的代码,共享对象sh.so是从sh.c构建的,通过global.h访问globalVar。尽管我的可执行文件定义了globalVar (静态链接),但是当我加载动态链接库sh.so时,它表示未定义的globalVar。怎么处理这个?
我正在试图找到导入外部符号的共享库。目前,我可以通过使用nm或许多替代方案(如使用radare2 )获得所有导入的符号。我还可以通过使用ldd获得二进制所依赖的库。但是,由于找不到有效的方法来获取二进制文件中的哪个外部符号依赖于哪个共享库,我就陷入了困境。因此,例如,如何找到一个共享库,它可以高效地导出名为foo或printf的函数或任何东西?我举一个例子:
Output of nm -D myfile
w __cxa_finalize
U foo
w __gmon_start__
通过使用引导扩展,我试图理解jsm模块的作用域和/或持久性,方法是在一个模块对象上设置一个名为baseUri的属性,然后从bootstrap.js中的javascript (从Add打开)中再次读取它。
我目前的理解是,一旦加载了JavaScript代码模块,就会持久化。但是,当我尝试从baseUri访问options.xul时,它的值是undefined。
install.rdf
<!-- just the relevant XML (this works as expected, by the way): -->
<em:optionsURL>chrome://te