我有一个C可执行文件,想知道可执行文件中是否存有关于编译它的文件的任何信息,如果有的话,如何访问该信息?我正在使用RedHat Linux 6.
答案 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
,其中包含所有调试信息)。