深入理解计算机系统-----readelf分析

        ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式。内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码,从哪里获取初始化数据,在哪里应该加载共享库,等信息。

        ELF文件主要三种文件类型,具体参考(https://blog.csdn.net/zl6481033/article/details/84990262)。

        那么从ELF文件上可以得到什么信息,在linux上有一个GNU软件,可以查看目标文件内容。我们得到一个可执行文件,可以采用指令 readelf -h a.out 来查看其信息。

       有关readelf指令使用如下:

NAME
       readelf - Displays information about ELF files.

SYNOPSIS
       readelf [-a|--all]
               [-h|--file-header]
               [-l|--program-headers|--segments]
               [-S|--section-headers|--sections]
               [-g|--section-groups]
               [-t|--section-details]
               [-e|--headers]
               [-s|--syms|--symbols]
               [--dyn-syms]
               [-n|--notes]
               [-r|--relocs]
               [-u|--unwind]
               [-d|--dynamic]
               [-V|--version-info]
               [-A|--arch-specific]
               [-D|--use-dynamic]
               [-x <number or name>|--hex-dump=<number or name>]
               [-p <number or name>|--string-dump=<number or name>]
               [-R <number or name>|--relocated-dump=<number or name>]
               [-z|--decompress]
               [-c|--archive-index]
               [-w[lLiaprmfFsoRt]|
                --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]]
               [--dwarf-depth=n]
               [--dwarf-start=n]
               [-I|--histogram]
               [-v|--version]
               [-W|--wide]
               [-H|--help]

        可执行文件分析如下:

        

        从上图中头部信息可以得到很多信息,根据Class、Machine、Type可以知道这个文件是在x86-64位机器上可执行文件,根据Entry point address 知道程序启动是从虚拟地址0x4003e0开始运行,这个地址并不是main的地址,而是_start函数地址,_start函数是链接器创建的,为了初始化程序。number of program header 程序有9个段, Number of section headers 程序有31个区,区中的信息是用来将链接使用的,主要包括程序代码、程序数据、重定向信息等。、

        查看区的信息可以使用:readelf -S a.out。

        更多内容参考(https://blog.csdn.net/linux_ever/article/details/78210089)。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值