可以用readelf命令来查看elf文件内容,跟objdump相比,这个命令更详细。

1、 readelf -h SimpleSection.o

  1. ELF Header:
  2. Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 45E 4CL 46F
  3. Class: ELF64
  4. Data: 2's complement, little endian
  5. Version: 1 (current)
  6. OS/ABI: UNIX - System V
  7. ABI Version: 0
  8. Type: REL (Relocatable file)
  9. Machine: Advanced Micro Devices X86-64
  10. Version: 0x1
  11. Entry point address: 0x0
  12. Start of program headers: 0 (bytes into file)
  13. Start of section headers: 1056 (bytes into file) 段表在文件中的偏移
  14. Flags: 0x0
  15. Size of this header: 64 (bytes) 文件头大小
  16. Size of program headers: 0 (bytes)
  17. Number of program headers: 0
  18. Size of section headers: 64 (bytes) 每个段表结构大小
  19. Number of section headers: 13                  段表头数目
  20. Section header string table index: 12

2、readelf -S   查看段表结构

  1. There are 13 section headers, starting at offset 0x420:
  2.  
  3. Section Headers:
  4. [Nr] Name Type Address Offset
  5. Size EntSize Flags Link Info Align
  6. [ 0] NULL 0000000000000000 00000000
  7. 0000000000000000 0000000000000000 0 0 0
  8. [ 1] .text PROGBITS 0000000000000000 00000040
  9. 0000000000000054 0000000000000000 AX 0 0 1
  10. [ 2] .rela.text RELA 0000000000000000 00000310
  11. 0000000000000078 0000000000000018 I 10 1 8
  12. [ 3] .data PROGBITS 0000000000000000 00000094
  13. 0000000000000008 0000000000000000 WA 0 0 4
  14. [ 4] .bss NOBITS 0000000000000000 0000009c
  15. 0000000000000004 0000000000000000 WA 0 0 4
  16. [ 5] .rodata PROGBITS 0000000000000000 0000009c
  17. 0000000000000004 0000000000000000 A 0 0 1
  18. [ 6] .comment PROGBITS 0000000000000000 000000a0
  19. 000000000000002e 0000000000000001 MS 0 0 1
  20. [ 7] .note.GNU-stack PROGBITS 0000000000000000 000000ce
  21. 0000000000000000 0000000000000000 0 0 1
  22. [ 8] .eh_frame PROGBITS 0000000000000000 000000d0
  23. 0000000000000058 0000000000000000 A 0 0 8
  24. [ 9] .rela.eh_frame RELA 0000000000000000 00000388
  25. 0000000000000030 0000000000000018 I 10 8 8
  26. [10] .symtab SYMTAB 0000000000000000 00000128
  27. 0000000000000180 0000000000000018 11 11 8
  28. [11] .strtab STRTAB 0000000000000000 000002a8
  29. 0000000000000066 0000000000000000 0 0 1
  30. [12] .shstrtab STRTAB 0000000000000000 000003b8
  31. 0000000000000061 0000000000000000 0 0 1
  32. Key to Flags:
  33. W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  34. L (link order), O (extra OS processing required), G (group), T (TLS),
  35. C (compressed), x (unknown), o (OS specific), E (exclude),
  36. l (large), p (processor specific)
  1. There are 13 section headers, starting at offset 0x420:
    目标文件大小1888字节,段表在0x420开始,每个section header 64 bytes(见头文件)
    因而: 0x420 + 64*13(dec)=1056 + 832 =1888正好。

    3、查看字符串表与段表字符串表内容

    od --skip-bytes 0x000002a8 --read-bytes 0x66 -t x2z SimpleSection.o(参数见2中段表信息 偏移与大小)
  1. 0001250 5300 6d69 6c70 5365 6365 6974 6e6f 632e >.SimpleSection.c<
  2. 0001270 7300 6174 6974 5f63 6176 2e72 3731 3033 >.static_var.1730<
  3. 0001310 7300 6174 6974 5f63 6176 3272 312e 3337 >.static_var2.173<
  4. 0001330 0031 6c67 626f 6c61 695f 696e 5f74 6176 >1.global_init_va<
  5. 0001350 0072 6c67 626f 6c61 755f 696e 696e 5f74 >r.global_uninit_<
  6. 0001370 6176 0072 7566 636e 0031 7270 6e69 6674 >var.func1.printf<
  7. 0001410 6d00 6961 006e >.main.<
  8. 0001416

4、查看段表字符串表内容

 od --skip-bytes 0x000003b8 --read-bytes 0x61 -t x1z SimpleSection.o

  1.  
  1. 0001670 00 2e 73 79 6d 74 61 62 00 2e 73 74 72 74 61 62 >..symtab..strtab<
  2. 0001710 00 2e 73 68 73 74 72 74 61 62 00 2e 72 65 6c 61 >..shstrtab..rela<
  3. 0001730 2e 74 65 78 74 00 2e 64 61 74 61 00 2e 62 73 73 >.text..data..bss<
  4. 0001750 00 2e 72 6f 64 61 74 61 00 2e 63 6f 6d 6d 65 6e >..rodata..commen<
  5. 0001770 74 00 2e 6e 6f 74 65 2e 47 4e 55 2d 73 74 61 63 >t..note.GNU-stac<
  6. 0002010 6b 00 2e 72 65 6c 61 2e 65 68 5f 66 72 61 6d 65 >k..rela.eh_frame<
  7. 0002030 00 >.<
  8. 0002031
  1.  

5、查看符号表信息

readelf -s SimpleSection.c  (小 写 s)

  1. Symbol table '.symtab' contains 16 entries:
  2. Num: Value(符号值) Size Type Bind Vis Ndx Name
  3. 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
  4. 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS SimpleSection.c
  5. 2: 0000000000000000 0 SECTION LOCAL DEFAULT 1
  6. 3: 0000000000000000 0 SECTION LOCAL DEFAULT 3
  7. 4: 0000000000000000 0 SECTION LOCAL DEFAULT 4
  8. 5: 0000000000000000 0 SECTION LOCAL DEFAULT 5
  9. 6: 0000000000000004 4 OBJECT LOCAL DEFAULT 3 static_var.1730
  10. 7: 0000000000000000 4 OBJECT LOCAL DEFAULT 4 static_var2.1731
  11. 8: 0000000000000000 0 SECTION LOCAL DEFAULT 7
  12. 9: 0000000000000000 0 SECTION LOCAL DEFAULT 8
  13. 10: 0000000000000000 0 SECTION LOCAL DEFAULT 6
  14. 11: 0000000000000000 4 OBJECT GLOBAL DEFAULT 3 global_init_var 全局变量,定义在第 3 (.data
  15. 12: 0000000000000004 4 OBJECT GLOBAL DEFAULT COM global_uninit_var
  16. 13: 0000000000000000 33 FUNC GLOBAL DEFAULT 1 func1
  17. 14: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND printf
  18. 15: 0000000000000021 51 FUNC GLOBAL DEFAULT 1 main
  1.  

binary hacks读数笔记(readelf命令)的更多相关文章

  1. binary hacks读数笔记(readelf基本命令)

    一.首先对readelf常用的参数进行简单说明: readelf命令是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用,下面以ELF格式可执行文件test为例详细介绍: 1. ...

  2. binary hacks读数笔记(objdump命令)

    一.首先看一下几个常用参数的基本含义: objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: 1.objdump -f ...

  3. binary hacks读数笔记(nm命令)

    nm命令(names):输出包含三个部分:1 符号值.默认显示十六进制,也可以指定: 2 符号类型.小写表示是本地符号,大写表示全局符号(external); 3 符号名称. 例如:nm Simple ...

  4. binary hacks读数笔记(od命令)

    Linux od命令用于输出文件内容. od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来 -t<输出格式>或--format=<输出格式> 设置输出格式. 实例 ...

  5. binary hacks读数笔记(file命令与magic file)

    file命令的作用是用于检验文件的类型,并打印至终端.file命令检验文件类型按以下顺序来完成: 检验文件系统(Filesystem)中支持的文件类型. 检验magic file规则. 检验文件内容的 ...

  6. binary hacks读数笔记(装载)

    1.地址空间 在linux系统中,每个进程拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小是由计算机硬件决定的,具体地说,是由CPU的位数决定的.比如,32位硬件平台决定的虚拟地址空间大小:0--2 ...

  7. binary hacks读数笔记(ld 链接讲解 二)

    这块将介绍一下ld链接命令的具体使用.ld的作用:ld是GNU binutils工具集中的一个,是众多Linkers(链接器)的一种.完成的功能自然也就是链接器的基本功能:把各种目标文件和库文件链接起 ...

  8. binary hacks读数笔记(ld 链接讲解 一)

    首先我们先看两段代码: a.c extern int shared; int main(){ int a=100; swap(&a,&shared); } b.c int shared ...

  9. binary hacks读数笔记(堆、栈 VMA的分布)

    一.首先看一个简单的程序: #include<stdlib.h> int main() { while(1) { sleep(1000); } return 0; } gcc -stati ...

随机推荐

  1. 多测师讲解python _函数中变量_高级讲师肖sir

    定义的函数内部的变量名如果是第一次出现, 且在=符号前,那么就可以认为是 被定义为局部变量.在这种情况下,不论全局变量中是否用到该变量名,函数中 使用的都是局部变量.例如: num=100 #全局变量 ...

  2. python面试题-django相关

    1.中间件 中间件一般做认证或批量请求处理,django中的中间件,其实是一个类,在请求和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法, 如请求过来 执行process_re ...

  3. beego和gin对比

    一.对mvc的支持 beego支持完整的mvc M:Model,beego orm,把数据库数据变成object 特性 支持go的所有类型存储 更简洁的curd风格 完整实现了健壮的ORM 支持的数据 ...

  4. centos8平台yum无法安装一些常用软件的解决,如:screen,iftop,nethogs

    一,例如:安装screen时报错: [root@localhost liuhongdi]# yum install screen 上次元数据过期检查:17:39:58 前,执行于 2020年03月18 ...

  5. List<String>转换为实体类的属性【转】

    package model; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arr ...

  6. Python列表的增删改查

    列表的增: li = ['libai','sushi','dufu','sushi',"白居易"] 第一种: append():向列表末尾追加元素 li.append('diaoc ...

  7. Linux命令行bash的快捷键

    提升效率 锁屏 Ctrl + s 敲什么命令没反应,但是敲上去了,屏幕上不做任何反应 Ctrl + q 再解锁 例如: 先Ctrl + s 锁屏 然后在命令行敲入 [root@C8-1 ~]# rm ...

  8. WebSocket的理解

    Websocket相对于无状态的HTTp协议,是在一次成功连接之后,在关闭请求之前,服务器和客户端能顺利进行信息传输.而不用像HTTP那样每一次都要告诉服务器这个请求者是谁(身份鉴别信息). 在HTT ...

  9. centos7启用EPEL Repository

    1,下载库文件 http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm 2,安装 r ...

  10. LeakCanary检测内存泄漏

    内存泄漏原因: 线程造成的内存泄漏 Handler造成的内存泄漏 单例导致内存泄露 静态变量导致内存泄露 非静态内部类导致内存泄露 未取消注册(BroadcastReceiver )或回调导致内存泄露 ...