15得票1回答
SYSV与Linux/GNU ELF格式比较

问题是在下面这个问题的背景下提出的:为什么库明明在-L路径上,但链接器却找不到库?。看起来我的库和目标文件具有不同的ELF格式,这可能导致链接器无法"找到"库。 现在,这引发了几个问题: 似乎我的编译器通常生成SYSV ELF文件。(使用file检查) 然而,针对特定的C++源文件,它生...

9得票2回答
将文件打包进ELF可执行文件

我目前正在寻找一种向已编译的ELF可执行文件添加数据的方法,即嵌入文件到可执行文件中而不需要重新编译它。 我可以轻松地使用 cat myexe mydata > myexe_with_mydata 实现这一点,但是我无法从可执行文件中访问数据,因为我不知道原始可执行文件的大小。 有没...

7得票2回答
在Linux(i386架构)中,可执行堆栈的示例

我发现当我们使用嵌套函数时,GCC需要跳板代码的可执行栈。然而,下面的代码在使用gcc编译时不显示可执行栈。(我使用execstack验证栈是否可执行)。 #include <stdio.h> #include <unistd.h> int main() { ...

28得票5回答
如何在Linux架构上列出C代码中所有可用函数/符号的即时列表?

假设main.c使用了共享库中的符号和在main.c中声明的本地函数。 有没有一种简单而优雅的方法在运行时打印所有可用函数名称和符号的列表? 这应该是可能的,因为数据加载到了.code段中。

12得票1回答
ELF的.notes节真的必要吗?

在Linux上,我正在尝试剥离一个静态链接的ELF文件,只保留最基本的部分。当我运行以下命令时:strip --strip-unneeded foo 或者strip --strip-all foo 转换后的文件仍然有一个肥大的.notes节,似乎充满了奇怪的字符串。 .notes节是否真的需...

9得票2回答
手动创建ELF文件

嗨,我手动创建了一个ELF文件,它有两个节(.text和.shstrtab)和一个程序头,该程序头加载.text节。.text节非常小,仅包含以下三条指令... # and exit movl $0,%ebx # first argument: exit c...

7得票1回答
如何在Mac OS X上创建一个ELF可执行文件?

我正在按照这个教程进行学习:https://littleosbook.github.io/#linking-the-kernel 目前我使用的是Mac,我已经用nasm创建了一个目标文件,现在想使用ld将其转换为ELF可执行文件。然而,在Mac上的ld似乎不支持ELF格式,但我又不想运行Ub...

11得票1回答
无法解析的`R_X86_64_NONE`重定位

我正在CentOS 7上使用Devtoolset-7,已经用它构建了Boost 1.65.1。但是当我链接我的应用程序时,出现了以下错误:/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: /opt/rh/de...

45得票2回答
为什么除了使用GOT之外,还需要存在PLT?

我知道在典型的ELF二进制文件中,函数通过过程链接表(PLT)被调用。函数的PLT条目通常包含一个跳转到全局偏移表(GOT)条目的指令。此条目将首先引用一些代码将实际函数地址加载到GOT中,并在第一次调用后包含实际函数地址(延迟绑定)。 确切地说,在进行延迟绑定之前,GOT条目指向PLT中的...

14得票3回答
如何在Linux中将PE(可移植可执行)格式转换为ELF

什么是将PE二进制文件转换为ELF二进制文件的最佳工具? 以下是提出这个问题的简要原因: 假设我有一个简单的C程序。 我使用gcc为Linux编译它(这会得到ELF),并使用“i586-mingw32msvc-gcc”为Windows编译它(这会得到PE二进制文件)。 我想使用Bitbl...