如何生成符号表?

时间:2022-03-19 06:06:22
gcc 加上那个参数能生成一些符号表信息呢?
我需要得到可执行文件中的函数对应的虚拟地址信息

7 个解决方案

#1


gcc -ggdb

#2


用readelf命令可以直接察看可执行文件。
readelf -s a.out 查看符号表
readelf -a a.out 查看所有信息

#3


刚试了一下,不加任何选项,直接gcc test.c
这样生成的a.out用readelf -s也能看到函数的地址。

如果用gcc -g test.c
符号表会多出一些内容

#4


我也用readelf -s查了一下 说是没有符号表

我是这样编译我的可执行文件的

先用gcc -c -g -ggdb 在各个子目录下生成.o文件
然后把很多的.o文件用ld生成一个可执行文件 
单独的.o文件可以查看的到符号表
但是最终的那个可执行文件就没有符号表 是不是ld也要设置什么选项之类的?

#5


不可能一个符号都没有吧?贴一下
# ld -v
# readelf -s t_sym

t_sym是你的可执行文件.

#6


GNU ld version 2.17.50.0.6-2.el5 20061020
确实没有
我在代码中有用到一些汇编 会不会是因为这个原因呢?

#7


我猜我知道原因了.贴一下你是怎样ld的?

#1


gcc -ggdb

#2


用readelf命令可以直接察看可执行文件。
readelf -s a.out 查看符号表
readelf -a a.out 查看所有信息

#3


刚试了一下,不加任何选项,直接gcc test.c
这样生成的a.out用readelf -s也能看到函数的地址。

如果用gcc -g test.c
符号表会多出一些内容

#4


我也用readelf -s查了一下 说是没有符号表

我是这样编译我的可执行文件的

先用gcc -c -g -ggdb 在各个子目录下生成.o文件
然后把很多的.o文件用ld生成一个可执行文件 
单独的.o文件可以查看的到符号表
但是最终的那个可执行文件就没有符号表 是不是ld也要设置什么选项之类的?

#5


不可能一个符号都没有吧?贴一下
# ld -v
# readelf -s t_sym

t_sym是你的可执行文件.

#6


GNU ld version 2.17.50.0.6-2.el5 20061020
确实没有
我在代码中有用到一些汇编 会不会是因为这个原因呢?

#7


我猜我知道原因了.贴一下你是怎样ld的?