1、查看可执行文件的相关动态链接库:ldd
[admin@logforward EN]$ ldd genIpData
libGeoIP.so.1 => /home/admin/Geoip/lib/libGeoIP.so.1 (0x00002b34c9a4c000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000301a400000)
libm.so.6 => /lib64/libm.so.6 (0x0000003008200000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003019000000)
libc.so.6 => /lib64/libc.so.6 (0x0000003007a00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003007600000)
2、查看可执行文件是多少位的:file
[admin@logforward EN]$ file genIpData
genIpData: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
3、查看可执行文件的符号:nm
[admin@logforward EN]$ nm genIpData
U GeoIPRecord_delete
U GeoIP_open_type
U GeoIP_record_by_addr
0000000000602af0 d _DYNAMIC
0000000000602cc8 d _GLOBAL_OFFSET_TABLE_
0000000000400d16 t _GLOBAL__I_main
0000000000401fe8 R _IO_stdin_used
w _Jv_RegisterClasses
U _Unwind_Resume@@GCC_3.0
……
GNU Binutils
gnu binutils安装指导参见: 安装 Binutils-2.14 在 第 6 章.
官方下载地址
Binutils (2.14):
ftp://ftp.gnu.org/gnu/binutils/
Binutils的内容
Binutils 是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。
安装下列程序: addr2line, ar, as, c++filt, gprof, ld,nm, objcopy, objdump, ranlib, readelf, size, strings 和 strip
安装下列库文件: libiberty.a, libbfd.[a,so] 和libopcodes.[a,so]
简短说明
addr2line 把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。
ar 建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。
as 主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。
c++filt 连接器使用它来过滤 C++ 和 Java 符号,防止重载函数冲突。
gprof 显示程序调用段的各种数据。
ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。
nm 列出目标文件中的符号。
objcopy把一种目标文件中的内容复制到另一种类型的目标文件中.
objdump 显示一个或者更多目标文件的信息。显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。
ranlib 产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。
readelf 显示ebf格式可执行文件的信息。
size 列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。
strings 打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。
strip 丢弃目标文件中的全部或者特定符号。
libiberty 包含许多GNU程序都会用到的函数,这些程序有: getopt, obstack, strerror, strtol 和 strtoul.
libbfd 二进制文件描述库.
libopcodes 用来处理opcodes的库, 在生成一些应用程序的时候也会用到它, 比如objdump.Opcodes是文本格式可读的处理器操作指令.
Binutils 安装依赖关系
Binutils 依赖于: Bash, Coreutils, Diffutils, GCC, Gettext,Glibc, Grep, Make, Perl, Sed, Texinfo.