有两个文件,一个编译并链接,gcc
另一个手动使用nasm
,ld
我得到
这两件事有什么区别?我可以看到readelf -h
那个是
DYN (Shared object file)
EXEC (Executable file)
我可以在维基百科ET_DYN
ET_EXEC
上看到这些记录为和。这两者之间有什么实际区别?
这似乎与位置无关可执行文件(PIE)有关。当 GCC 默认编译可执行文件时,它会使它们成为 PIE,从而将 ELF 标头上的输出标志更改为ET_DYN
.
您可以使用以下命令禁用 PIE 可执行文件的生成
gcc -no-pie
如果您看到此检查 gcc 配置的默认选项gcc -v
,您应该看到类似的内容--enable-default-pie
。
答案受到 StackOverflow 上此提交的启发。我打算在这里更多地使用它并解释更多。
归档时间: |
|
查看次数: |
7865 次 |
最近记录: |