jjzjj

binutils

全部标签

c++ - 如何找到全局静态初始化

我刚刚读了这篇优秀的文章:http://neugierig.org/software/chromium/notes/2011/08/static-initializers.html然后我尝试了:https://gcc.gnu.org/onlinedocs/gccint/Initialization.html虽然它所说的关于查找初始化器的内容对我不起作用。.ctors部分不可用,但我可以找到.init_array(另请参见Can'tfind.dtorsand.ctorsinbinary)。但是我该如何解释输出呢?我的意思是,页面大小的总和也可以通过size命令及其.bss列来处理-还是我

linux - 为什么 ELF 部分之间有未使用的空白空间?

似乎在Linux(Ubuntu15.04,32位)上使用gcc4.9.2创建的二进制文件在.eh_frame和.init_array部分之间有几千个未使用的字节>。objdump-h的简单可执行文件输出示例:Sections:IdxNameSizeVMALMAFileoffAlgn[...]16.eh_frame000000c0080484ac080484ac000004ac2**2CONTENTS,ALLOC,LOAD,READONLY,DATA17.init_array0000000408049f0808049f0800000f082**2CONTENTS,ALLOC,LOAD,D

linux - 为什么 ELF 部分之间有未使用的空白空间?

似乎在Linux(Ubuntu15.04,32位)上使用gcc4.9.2创建的二进制文件在.eh_frame和.init_array部分之间有几千个未使用的字节>。objdump-h的简单可执行文件输出示例:Sections:IdxNameSizeVMALMAFileoffAlgn[...]16.eh_frame000000c0080484ac080484ac000004ac2**2CONTENTS,ALLOC,LOAD,READONLY,DATA17.init_array0000000408049f0808049f0800000f082**2CONTENTS,ALLOC,LOAD,D

c - 将代码/符号修补到动态链接的 ELF 二进制文件中

假设我有一个动态链接的ELF二进制文件,我想覆盖/重定向某些库调用。我知道我可以使用LD_PRELOAD来做到这一点,但我想要一个在二进制文件中永久存在、独立于环境并且适用于setuid/setgid二进制文件的解决方案,LD_PRELOAD可以实现。我想做的是从其他目标文件中添加代码(如果需要,可能在新的部分中)并将这些目标文件中的符号添加到二进制文件的符号表中,以便使用新添加的代码版本代替共享库代码。我相信这应该是可能的,而无需在现有代码中实际执行任何重定位;即使它们在同一个文件中,它们也应该能够在运行时以通常的PLT方式解析(对于它的值(value),我只关心函数,而不关心数据)

c - 将代码/符号修补到动态链接的 ELF 二进制文件中

假设我有一个动态链接的ELF二进制文件,我想覆盖/重定向某些库调用。我知道我可以使用LD_PRELOAD来做到这一点,但我想要一个在二进制文件中永久存在、独立于环境并且适用于setuid/setgid二进制文件的解决方案,LD_PRELOAD可以实现。我想做的是从其他目标文件中添加代码(如果需要,可能在新的部分中)并将这些目标文件中的符号添加到二进制文件的符号表中,以便使用新添加的代码版本代替共享库代码。我相信这应该是可能的,而无需在现有代码中实际执行任何重定位;即使它们在同一个文件中,它们也应该能够在运行时以通常的PLT方式解析(对于它的值(value),我只关心函数,而不关心数据)

c - binutils/bfd.h 现在想要 config.h 吗?

我正在尝试使用BFD库,所以我安装了软件包binutils-dev并包含:#include我正在从我的代码中调用bfd_openr和bfd_close等等。最近我升级了软件包,现在我从这里得到一个错误:bfd.h:/*PR14072:Ensurethatconfig.hisincludedfirst.*/#if!definedPACKAGE&&!definedPACKAGE_VERSION#errorconfig.hmustbeincludedbeforethisheader#endif...我应该包括config.h-但我没有使用autoconf。我是否包含了错误的头文件?你应该如何

c - binutils/bfd.h 现在想要 config.h 吗?

我正在尝试使用BFD库,所以我安装了软件包binutils-dev并包含:#include我正在从我的代码中调用bfd_openr和bfd_close等等。最近我升级了软件包,现在我从这里得到一个错误:bfd.h:/*PR14072:Ensurethatconfig.hisincludedfirst.*/#if!definedPACKAGE&&!definedPACKAGE_VERSION#errorconfig.hmustbeincludedbeforethisheader#endif...我应该包括config.h-但我没有使用autoconf。我是否包含了错误的头文件?你应该如何

linux - 何时在 nm 中使用 --dynamic 选项

有时当我对.so文件(例如libstdc++.so.6)执行nm时,它说没有符号,我需要使用nm--dynamic。但是对于其他一些.so文件,我可以看到没有--dynamic的符号。文档说:显示动态符号而不是普通符号。这仅对动态对象有意义,例如某些类型的共享库。但这令人困惑……什么“类型”的共享库需要--dynamic?这是如何确定的?在库的编译过程中?我以为所有共享库都是动态的(我的意思是,可以在运行时动态加载),但我的理解似乎不太正确。 最佳答案 如果您的符号没有从您的共享库中导出,它很可能最终会出现在普通符号表中,而不是动态

linux - 何时在 nm 中使用 --dynamic 选项

有时当我对.so文件(例如libstdc++.so.6)执行nm时,它说没有符号,我需要使用nm--dynamic。但是对于其他一些.so文件,我可以看到没有--dynamic的符号。文档说:显示动态符号而不是普通符号。这仅对动态对象有意义,例如某些类型的共享库。但这令人困惑……什么“类型”的共享库需要--dynamic?这是如何确定的?在库的编译过程中?我以为所有共享库都是动态的(我的意思是,可以在运行时动态加载),但我的理解似乎不太正确。 最佳答案 如果您的符号没有从您的共享库中导出,它很可能最终会出现在普通符号表中,而不是动态

linux - 共享库如何在 64 位/32 位混合系统中工作?

早上好在64位RedHat机器上,我们必须编译并运行32位应用程序。同时,我设法编译了所需的gcc版本(4.0.3)和所有必需的32位运行时库,并将LD_LIBRARY_PATH设置为指向32位版本,但现在在剩余的构建过程中,需要执行一个小的java程序,它作为64位程序安装在/usr/bin中,它现在首先找到32位版本的libgcc_s.so。一般来说,如果我将LD_LIBRARY_PATH设置为32位版本,我会破坏64位程序,反之亦然。这应该如何工作?我确定我不是第一个遇到这个问题的人。一般是怎么解决的?问候,斯特凡 最佳答案