查看elf文件的常用命令总结

一,简介

本文主要介绍什么是elf文件,以及查看elf文件内部信息的常用命令。

二,ELF文件介绍

ELF(Excutable Linkable Format)。
ELF文件不仅包括可执行文件还包括动态链接库和静态链接库。

三,常用命令汇总

objdump:

命令功能介绍
objdump -h SimpleSection.o打印elf文件各段的基本信息
objdump -x SimpleSection.o把elf文件更多的信息打印出来
size SimpleSection.o查看代码段,数据段,bss段长度
objdump -s -d SimpleSection.o分析代码段的内容。-s 把所有参数以16进制打印出来,-d 所有包含指令的段反汇编
objdump -r SimpleSection.o查看elf文件中要重定位的地方,即elf文件中所有引用到外部符号的地址

readelf:

命令功能介绍
readelf -h SimpleSection.o查看elf文件头
readelf -S SimpleSection.o查看elf文件段,它显示的结果才是真正的段表结构
readelf -s SimpleSection.o查看elf文件的符号
readelf -h SimpleSection.o查看elf文件头

nm:

命令功能介绍
nm SimpleSection.o查看elf符号表

四,命令使用示例

本章节以SimpleSection.c为例,在linux环境下执行常用命令查看效果。

SimpleSection.c:

int printf(const char *format, ...);

int global_init_var = 84;
int global_uninit_var;

void func1(int i)
{
	printf("%d\n", i);
}

int main()
{
	static int static_var = 85;
	static int static_var2;
	int a = 1;
	int b;

	func1(static_var + static_var2 + a + b);

	return a;
}

使用gcc命令编译成.o文件:

gcc -c SimpleSection.c

4.1 objdump -h SimpleSection.o

objdump -h SimpleSection.o

SimpleSection.o:     file format elf64-x86-64

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .text         00000055  0000000000000000  0000000000000000  00000040  2**0
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000008  0000000000000000  0000000000000000  00000098  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000004  0000000000000000  0000000000000000  000000a0  2**2
                  ALLOC
  3 .rodata       00000004  0000000000000000  0000000000000000  000000a0  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .comment      00000036  0000000000000000  0000000000000000  000000a4  2**0
                  CONTENTS, READONLY
  5 .note.GNU-stack 00000000  0000000000000000  0000000000000000  000000da  2**0
                  CONTENTS, READONLY
  6 .eh_frame     00000058  0000000000000000  0000000000000000  000000e0  2**3
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA

4.2 size SimpleSection.o

   text    data     bss     dec     hex filename
    177       8       4     189      bd SimpleSection.o

4.3 objdump -s -d SimpleSection.o

显示信息太多就不贴了。。。

4.4 objdump -r SimpleSection.o

SimpleSection.o:     file format elf64-x86-64

RELOCATION RECORDS FOR [.text]:
OFFSET           TYPE              VALUE
0000000000000011 R_X86_64_32       .rodata
000000000000001b R_X86_64_PC32     printf-0x0000000000000004
0000000000000033 R_X86_64_PC32     .data
0000000000000039 R_X86_64_PC32     .bss-0x0000000000000004
000000000000004c R_X86_64_PC32     func1-0x0000000000000004


RELOCATION RECORDS FOR [.eh_frame]:
OFFSET           TYPE              VALUE
0000000000000020 R_X86_64_PC32     .text
0000000000000040 R_X86_64_PC32     .text+0x0000000000000022

4.5 readelf -h SimpleSection.o

ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          1072 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         13
  Section header string table index: 10

4.6 readelf -S SimpleSection.o

There are 13 section headers, starting at offset 0x430:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .text             PROGBITS         0000000000000000  00000040
       0000000000000055  0000000000000000  AX       0     0     1
  [ 2] .rela.text        RELA             0000000000000000  00000320
       0000000000000078  0000000000000018   I      11     1     8
  [ 3] .data             PROGBITS         0000000000000000  00000098
       0000000000000008  0000000000000000  WA       0     0     4
  [ 4] .bss              NOBITS           0000000000000000  000000a0
       0000000000000004  0000000000000000  WA       0     0     4
  [ 5] .rodata           PROGBITS         0000000000000000  000000a0
       0000000000000004  0000000000000000   A       0     0     1
  [ 6] .comment          PROGBITS         0000000000000000  000000a4
       0000000000000036  0000000000000001  MS       0     0     1
  [ 7] .note.GNU-stack   PROGBITS         0000000000000000  000000da
       0000000000000000  0000000000000000           0     0     1
  [ 8] .eh_frame         PROGBITS         0000000000000000  000000e0
       0000000000000058  0000000000000000   A       0     0     8
  [ 9] .rela.eh_frame    RELA             0000000000000000  00000398
       0000000000000030  0000000000000018   I      11     8     8
  [10] .shstrtab         STRTAB           0000000000000000  000003c8
       0000000000000061  0000000000000000           0     0     1
  [11] .symtab           SYMTAB           0000000000000000  00000138
       0000000000000180  0000000000000018          12    11     8
  [12] .strtab           STRTAB           0000000000000000  000002b8
       0000000000000066  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

4.7 readelf -s SimpleSection.o

Symbol table '.symtab' contains 16 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS SimpleSection.c
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    3
     4: 0000000000000000     0 SECTION LOCAL  DEFAULT    4
     5: 0000000000000000     0 SECTION LOCAL  DEFAULT    5
     6: 0000000000000004     4 OBJECT  LOCAL  DEFAULT    3 static_var.1839
     7: 0000000000000000     4 OBJECT  LOCAL  DEFAULT    4 static_var2.1840
     8: 0000000000000000     0 SECTION LOCAL  DEFAULT    7
     9: 0000000000000000     0 SECTION LOCAL  DEFAULT    8
    10: 0000000000000000     0 SECTION LOCAL  DEFAULT    6
    11: 0000000000000000     4 OBJECT  GLOBAL DEFAULT    3 global_init_var
    12: 0000000000000004     4 OBJECT  GLOBAL DEFAULT  COM global_uninit_var
    13: 0000000000000000    34 FUNC    GLOBAL DEFAULT    1 func1
    14: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND printf
    15: 0000000000000022    51 FUNC    GLOBAL DEFAULT    1 main

4.8 readelf -h SimpleSection.o

ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          1072 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           64 (bytes)
  Number of section headers:         13
  Section header string table index: 10

五,总结

本文主要讲了elf文件的常用命令,供参考。欢迎一起讨论交流~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Windows操作系统中,我们无法直接查看和解析ELF文件。因为ELF是一种针对Unix和Linux系统的可执行文件格式,而Windows使用的是PE(Portable Executable)格式。 如果我们想查看ELF文件内部的内容,我们可以使用一些第三方工具来实现。例如,我们可以使用一个名为"readelf"的命令行工具。需要注意的是,这个工具必须在Windows上安装一个UNIX环境(如Cygwin或MinGW),因为它是专为Unix和Linux操作系统设计的。 使用readelf工具,我们可以在命令行中执行类似于以下的命令:readelf -a filename,其中"filename"是要查看ELF文件的路径和名称。该命令将显示ELF文件的所有节(sections)和程序头(program headers)的详细信息,包括节类型、地址、大小、文件偏移等。 另外,我们还可以使用一些反汇编工具,如IDA Pro或Ghidra,来分析和查看ELF文件的汇编代码和符号表。这些工具通常被用于逆向工程和恶意软件分析。 总而言之,在Windows操作系统中查看ELF文件需要使用第三方工具,并且需要一些额外的配置和安装。这主要是因为ELF是Unix和Linux操作系统特有的文件格式,与Windows操作系统并不兼容。 ### 回答2: 在Windows上查看elf文件可以通过以下几种方法进行: 1. 使用专门的ELF文件查看器:可以通过在Windows上安装专门的ELF文件查看器来浏览和查看elf文件。这些工具通常提供了丰富的功能,包括查看文件的头部信息、节区、符号表、重定位表等。 2. 使用反汇编工具:在Windows上安装反汇编工具,比如IDA Pro、radare2等,可以将elf文件导入并进行反汇编,查看其汇编代码和程序逻辑。这些工具通常对符号表和重定位表的解析也比较准确,可以帮助理解elf文件的结构和内容。 3. 使用调试器:在Windows上安装调试器,如GDB或LLDB等,可以将elf文件加载到调试器中,并进行断点调试和变量查看等操作。调试器可以帮助我们深入了解elf文件的执行过程,分析其运行时行为,以及查看内存、寄存器等信息。 4. 使用文件查看工具:使用Windows自带的文件查看工具,如Hex编辑器,可以直接打开elf文件查看其16进制内容。但需要注意的是,elf文件的结构比较复杂,仅仅查看16进制内容可能无法完全理解其含义,需要结合其他工具来解析。 无论使用哪种方法,我们都需要了解elf文件的结构和格式,以及对应的解析方法,才能准确地查看和理解elf文件的内容。 ### 回答3: 在Windows上查看ELF文件可以通过安装相应的工具来实现。ELF(Executable and Linkable Format)是一种可执行和可链接文件的标准文件格式,主要用于UNIX和类UNIX操作系统。虽然Windows操作系统通常不直接支持ELF文件,但仍然可以用一些工具进行查看。 一种常用的工具是使用Windows上的GCC编译器。GCC是一个开源的编译器套件,包含了很多不同平台上的工具。其中包括一个名为objdump的工具,可以查看和分析各种格式的目标文件,包括ELF文件。可以通过下载和安装MinGW或者Cygwin来获取GCC的Windows版本,并使用其中的objdump工具。 另外,还有一些独立的ELF查看工具可以使用。比如ELF Viewer、elfdump等。这些工具可以提供ELF文件的各种信息,如ELF头部信息、节表、符号表等,以及可以进行反汇编查看代码等功能。 通过这些工具,我们可以查看ELF文件的结构和内容,了解代码和数据的布局、查看符号表、段信息等。可以帮助我们进行ELF文件的分析和调试,以及了解文件中包含的函数、变量等信息。 总之,在Windows上查看ELF文件需要使用特定的工具,如GCC套件中的objdump工具或者独立的ELF查看工具,这些工具可以帮助我们了解ELF文件的结构和内容,进行分析和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

音频金钟小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值