gcc 在Linux上编译PE的动态符号表

nkhmeac6  于 2023-10-19  发布在  Linux
关注(0)|答案(2)|浏览(187)

我正在尝试获取已编译的c文件的动态符号表的内容

  1. #include<stdio.h>
  2. int main(){
  3. printf("Hello, World!");
  4. return 0;
  5. }

作为Linux上的可移植可执行文件(PE),

  1. i686-w64-mingw32-gcc hello_world.c -o hello32
  2. x86_64-w64-mingw32-gcc hello_world.c -o hello64

使用objdump:

  1. objdump --dynamic-syms hello32

并得到输出:

  1. hello32: file format pei-i386
  2. objdump: hello32: not a dynamic object
  3. DYNAMIC SYMBOL TABLE:
  4. no symbols

我希望在表中有类似printf的函数。它适用于GCC和ELF二进制文件。
有谁知道如何正确编译文件以获得一个包含内容的动态符号表吗?

xkftehaa

xkftehaa1#

  • 动态符号 * 的概念似乎在PE目标binutils中有点丢失。使用objdump -p <file>objdump -x <file>并在输出中查找 import tables。我还没有找到一个更好的binutils解决方案。LLVM中的llvm-readobj --coff-imports <file>。如果你想在运行时查看符号的来源,ntldd是一个很好的工具。
dwbf0jvd

dwbf0jvd2#

试试看:

  1. dumpbin /imports hello32

printf将出现在输出表中。

相关问题