autoHeader

利用libbfd获取elf可执行文件的section(节)及symbol(符号)信息

陌路散爱 提交于 2020-08-18 21:43:46
一. 安装bfd库 libbfd(Binary File Descriptor library是binutils中附带的一个C库。 从 http://ftp.gnu.org/gnu/binutils 下载binutils。 我们这里下载binutils-2.23.2.tar.gz 下载后,解压安装libbfd。方法如下: tar -xzf binutils-2.23.2.tar.gz cd binutils-2.23.2/bfd ./configure make make install 安装完成后,可以看到有如下文件生成。 /usr/local/include/bfd.h /usr/local/lib/libbfd.a 二. 使用bfd库需要注意的地方 1. 头文件包含 程序使用bfd,需要包含bfd.h头文件。 但是,在包含bfd.h之前,还需要包含config.h。 即代码中需要有如下形式的文件包含: #include "config.h" #include <bfd.h> 那么这个config.h是什么东东呢?他不是系统的头文件,也不是bfd库的头文件,而是应用程序自己的头文件。 然而用户可能会感到奇怪,我的应用程序源码中并不存在这个config.h文件。那是因为你开发应用时,没有采用GNU autotools。 采用GNU autotools的项目

Linux Makefile自动生成--config.h

倖福魔咒の 提交于 2020-03-02 03:48:01
Linux Makefile自动生成--总体流程 Linux Makefile自动生成--实例 Linux Makefile自动生成--config.h config.h主要用于代码移植,产生可移植代码。 有些函数只适用于特定的系统,并不通用,如gettimeofday。只能在特定的系统上使用,这样就不能移植了。 可以在可以使用的系统上使用gettimeofday,而不能使用的系统上使用另一种方式。 1. 代码如下: #include <stdio.h> #include <sys/time.h> #include <time.h> #include "config.h" double get_epoch() { double sec; #ifdef HAVE_GETTIMEOFDAY struct timeval tv; gettimeofday(&tv, NULL); sec = tv.tv_sec; sec += tv.tv_usec / 1000000.0; #else sec = time(NULL); #endif return sec; } int main(int argc, char* argv[]) { printf("%f\n", get_epoch()); return 0; } 上述config.h为生成的文件。通过#ifdef来采用某些代码。 2.