Joh*_*ith 6 c++ linux binary decompiling elf
如何使用C++获取linux中elf二进制文件所需的所有动态库列表?
一旦我设法从二进制文件中提取信息(文件名?),我可以通过搜索找到实际文件PATH,但我无法找到有关从ELF二进制文件中提取未编码信息的任何信息.
思考?
所需的共享对象列表存储在可执行文件的所谓动态部分中.获取必要信息的粗略算法将是这样的:
ET_EXEC或ET_DYN).e_phoff/e_phnum/e_phentsize)的偏移量和计数,检查它们是否为非零且有效.PT_DYNAMIC一个.还要记住段的虚拟地址 - >文件偏移映射PT_LOAD.DT_NEEDED和DT_STRTAB条目.条目的d_val字段DT_NEEDED是DT_STRTAB字符串表的偏移量,它将是所需库的SONAME.请注意,由于DT_STRTABentry是运行时地址而不是字符串表的偏移量,因此您需要使用步骤3中存储的信息将其映射回文件偏移量.
小智 5
你可以调用"readelf -d"程序并解析输出:
readelf -d /usr/bin/readelf | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libz.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
Run Code Online (Sandbox Code Playgroud)