您可以从C可执行文件中提取有关编译源文件的信息吗?

时间:2013-11-15 20:17:17

标签: c executable

我有一个C可执行文件,想知道可执行文件中是否存有关于编译它的文件的任何信息,如果有的话,如何访问该信息?我正在使用RedHat Linux 6.

2 个答案:

答案 0 :(得分:1)

如果您的程序已经编译了调试信息,那么是的,这是可能的。

例如,我使用test.c

编译了gcc -ggdb3 test.c -o test

然后,gdb ./test

(gdb) info functions
All defined functions:

File main.c:
int main(int, char **);

Non-debugging symbols:
0x0000000000400370  _init
0x00000000004003a0  __libc_start_main@plt
0x00000000004003b0  __gmon_start__@plt
0x00000000004003c0  _start
0x00000000004003f0  deregister_tm_clones
0x0000000000400420  register_tm_clones
0x0000000000400460  __do_global_dtors_aux
0x0000000000400480  frame_dummy
0x00000000004004d0  __libc_csu_init
0x0000000000400540  __libc_csu_fini
0x0000000000400544  _fini

(gdb) info sources
Source files for which symbols have been read in:

/home/john/Projects/test/main.c, /usr/include/bits/sys_errlist.h, ...

Source files for which symbols will be read in on demand:

答案 1 :(得分:1)

它完全取决于体系结构,以及可执行文件是否以调试模式(或类似)编译。

例如,UNIX系统在可执行文件本身中嵌入调试信息(包括文件名),而Windows将信息存储在单独的文件中(即myprog.exe具有相应的myprog.pdb,其中包含所有调试信息)。