regarding symbol table
Andi Hellmund
mail@andihellmund.com
Thu Apr 23 18:40:00 GMT 2009
Hey ranjith kumar,
>
>
>> 1) Given an executable file(say a.out) is it possible from which files
>> that executable is produced?
>>
>
> No, not as far as I am aware.
>
> You could add static volatile strings in your source code, which would
> indicate their origins:
>
> static char* volatile whence = __FILE__;
>
> Then you could a utility like strings (/usr/bin/strings) to find them:
>
> strings a.out
>
>
Under certain circumstances, it might be possible to derive the source
files from an executable without having the sources. The circumstances
are that the executable is not stripped, otherwise quite all useful
information is lost.
Assuming you have two source files - 1.c and 2.c - and compile them 'gcc
1.c 2.c -o exec'.
Then you could review the source files with
andi@roma:~/Programming/c$ readelf --symbols exec | grep ABS
33: 00000000 0 FILE LOCAL DEFAULT ABS init.c
34: 00000000 0 FILE LOCAL DEFAULT ABS initfini.c
35: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
43: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
48: 00000000 0 FILE LOCAL DEFAULT ABS initfini.c
49: 00000000 0 FILE LOCAL DEFAULT ABS 1.c
50: 00000000 0 FILE LOCAL DEFAULT ABS 2.c
69: 0804a014 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
70: 0804a01c 0 NOTYPE GLOBAL DEFAULT ABS _end
71: 0804a014 0 NOTYPE GLOBAL DEFAULT ABS _edata
Alternatively, you could also use nm:
nm -a exec | grep " a " (ugly solution to filter all the ABS values)
00000000 a 1.c
00000000 a 2.c
00000000 a crtstuff.c
00000000 a crtstuff.c
00000000 a init.c
00000000 a initfini.c
00000000 a initfini.c
Hope that helps.
Best regards,
Andi
More information about the Gcc-help
mailing list