PIC(位置无关代码)
有什么方法可以检查目标文件(.o 文件)是否启用了 PIC?
Is there any way to check if an object file(.o file) is PIC-enabled?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有什么方法可以检查目标文件(.o 文件)是否启用了 PIC?
Is there any way to check if an object file(.o file) is PIC-enabled?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
不确定它的可移植性如何,但对于 x86 和 x86_64、ELF 格式,您可以使用 readelf -r 并查看重定位类型。
对于 32 位 PIC 代码,您应该有一个 R_386_GOTPC 重定位节:
对于非 PIC
.o
不应该存在这样的节。 (您还会在readelf -s
输出中看到一个全局偏移表。)对于 64 位,情况相同,但具有
R_X86_64_GOTPCREL
重定位类型。我很确定所有重定位类型名称都直接指示代码是否是 PIC,但我现在找不到参考。Not sure how portable this is, but for x86 and x86_64, ELF format, you can use
readelf -r
and look at the relocation types.For 32bit PIC code, you should have a R_386_GOTPC relocation section:
No such section section should exists for non-PIC
.o
s. (You'll also see a global offset table in thereadelf -s
output.)For 64bit, same thing but with a
R_X86_64_GOTPCREL
relocation type. I'm pretty sure all the relocation type names are directly indicative of whether the code is PIC or not, but I can't find a reference right now.