ELFUtils
1.1、ELFUtils简介
是什么 ?:a collection of utilities and libraries to read, create and modify ELF binary files, find and handle DWARF debug data, symbols, thread state and stacktraces for processes and core files on GNU/Linux.
开发语言:C
官方主页:https://sourceware.org/elfutils
1.2、通过包管理器安装ELFUtils
操作系统包管理器安装命令
aptsudo apt-get install -y elfutils
CentOSyumsudo yum install -y elfutils
dnfsudo dnf install -y elfutils
openSUSEzyppersudo zypper install -y elfutils
Alpine Linuxapksudo apk add elfutils

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm elfutils
Gentoo LinuxPortagesudo emerge elfutils
1.3、通过编译源码安装ELFUtils 

step1、安装依赖

下载时cURL
解压时tarbzip2
编译时POSIX shGNU CoreUtilsGNU makeGCC ( gcc )   | LLVM / Clang
运行时
  • glibc ( libc.sold-linux-x86-64.so )

step2、使用curl命令下载ELFUtils源码包 (

curl -LO https://sourceware.org/elfutils/ftp/0.178/elfutils-0.178.tar.bz2

step3、使用tar解压ELFUtils源码包

tar vxf elfutils-0.178.tar.bz2

step4、进入elfutils-0.178目录

cd elfutils-0.178

step5、查看elfutils-0.178目录中的内容

step6、创建构建目录,并进入该目录

mkdir build && cd build

step7、使用../configure配置编译参数

../configure是一个可执行的POSIX sh脚本,用它 配置后会产生GNU make的配置文件Makefile

../configure的使用格式如下:

./configure [option]... [VAR=VALUE]...
option说明
--help    | -h查看../configure的使用帮助
--version | -V查看../configure是哪个版本的autoconf生成的
--quiet   | -q | --silent不输出checking...这些信息
--prefix=DIR指定安装目录。默认是/usr/local/
--host=HOST
设置目标程序运行的CPU平台
一般不需要设置,除非你想要交叉编译
默认与与宿主机一样
--enable-FEATURE[=yes|no]
yes:开启FEATURE
no :关闭FEATURE
--enable-dependency-tracking[=yes|no]是否开启依赖追踪
--enable-option-checking[=yes|no]是否检查有无不认识的--enable-FEATURE--with-PACKAGE参数
--enable-silent-rules[=yes|no]
yes相当于make V=0
no 相当于make V=1
--enable-nls[=yes|no]是否支持Native Language Support
--enable-largefile[=yes|no]是否支持大文件(超过2GB)
--enable-gprof[=yes|no]是否支持gprof
--enable-gcov[=yes|no]是否使用gcov测试用例的覆盖率统计
--enable-valgrind[=yes|no]是否支持Valgrind
--enable-valgrind-annotations[=yes|no]是否支持Valgrindannotations
--enable-install-elfh[=yes|no]是否安装elf.h
--enable-debuginfod[=yes|no]是否编译debuginfod,依赖BinUtils >=2.34
--enable-sanitize-undefined[=yes|no]是否开启编译器Undefined Behavior Sanitizer特性
--with-PACKAGE[=yes|no]
yes: 使用PACKAGE
no:不使用PACKAGE
--with-valgrind[=DIR]设置Valgrind的头文件所在路径
--with-zlib[=DIR]设置zlib的所在位置
--with-bzlib[=DIR]设置bzip2libbz2)的所在位置
--with-lzma[=DIR]设置xzliblzma)的所在位置

注意:

enable-FEATURE对应的选项,还有disable-FEATUREdisable-FEATURE相当于enable-FEATURE=no

with-PACKAGE对应的选项,还有without-PACKAGEwithout-PACKAGE相当于with-PACKAGE=no

示例:

../configure --prefix=/usr

step8、使用GNU make进行编译

make [option]... [VAR=VALUE]... [TARGET]...
VARVALUE示例说明
CCgcc |  clang指定C编译器
CFLAGS-O2 -v指定C编译器的参数
CXXg++ |  clang++指定C++编译器
CXXFLAGS-O2 -v指定C++编译器的参数
CPPcpp指定C预处理器
CPPFLAGS-I<includeDIR>指定C预处理器的参数
LDFLAGS-L<libDIR>指定C链接器的参数
LIBS-l<libName>指定C链接器要链接的库的名称
YACC/usr/bin/yacc指定yacc命令的路径。通常使用Bison实现
YFLAGS设置yacc命令的参数

示例:

make CFLAGS="-O2 -v"

step9、安装

sudo make install
1.4、ELFUtils中包含的命令
1.5、ELFUtils中包含的头文件
1.6、ELFUtils中包含的库文件
  • libasm.{a | so}
  • libdw.{a | so}
  • libelf.{a | so}