我正在寻找一种快速检查ELF二进制文件是共享对象还是位置无关可执行文件的方法.我认为可以通过检查包含的符号/函数来做到这一点.我正在寻找一种不必阅读完整文件的更有效方法.我必须在不同的平台上执行检查,至少是Android,Linux(32位和64位).
我正在寻找一种快速检查ELF二进制文件是共享对象还是独立位置可执行文件的方法.
有没有办法来检查:一PIE可执行文件是一个共享对象.
我认为可以通过检查包含的符号/函数来做到这一点.
符号可以被删除,一旦它们被删除,你就无法分辨.
它们通常由链接的启动代码区分的共享对象和可执行文件
这是真的:PIE通常与之相关联Scrt1.o,但共享库通常不会.但是没有什么可以防止共享库被链接Scrt1.o,并且在剥离的二进制文件中甚至发现启动代码可能有些问题.
如果您真正想要的是区分共享库和您自己构建的PIE可执行文件(而不是解决任何共享库和任何 PIE 的一般情况),那么检查PT_INTERP(readelf -l a.out | grep INTERP)的存在可能是最简单的方法:保证PIE可执行文件具有PT_INTERP,并且共享库通常没有它(libc.so.6是一个值得注意的例外).
| 归档时间: |
|
| 查看次数: |
3033 次 |
| 最近记录: |