binary hacks读数笔记(objdump命令)
一、首先看一下几个常用参数的基本含义:
objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍:
1、objdump -f test 显示test的文件头信息
2、objdump -d test 反汇编test中的需要执行指令的那些section
3、objdump -D test 与-d类似,但反汇编test中的所有section
4、objdump -h test 显示test的Section Header信息
5、objdump -x test 显示test的全部Header信息
6、objdump -s test 除了显示test的全部Header信息,还显示他们对应的十六进制文件代码
二、接着看一段程序:
- int printf(const char* fromat,...);
- 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 -c SimpleSection.o
1、利用objdump -h命令将SimpleSection.o这个ELF文件的各个段基本信息打印出来,如下:
Idx Name Size VMA LMA File off Algn
0 .text 0000004f 0000000000000000 0000000000000000 00000040 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000008 0000000000000000 0000000000000000 00000090 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000004 0000000000000000 0000000000000000 00000098 2**2
ALLOC
3 .rodata 00000006 0000000000000000 0000000000000000 00000098 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .comment 0000002e 0000000000000000 0000000000000000 0000009e 2**0
CONTENTS, READONLY
5 .note.GNU-stack 00000000 0000000000000000 0000000000000000 000000cc 2**0
CONTENTS, READONLY
6 .eh_frame 00000058 0000000000000000 0000000000000000 000000d0 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
- SimpleSection.o: file format elf64-x86-64
- SimpleSection.o
- architecture: i386:x86-64, flags 0x00000011:
- HAS_RELOC, HAS_SYMS
- start address 0x0000000000000000
- Sections:
- Idx Name Size VMA LMA File off Algn
- 0 .text 00000054 0000000000000000 0000000000000000 00000040 2**0
- CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
- 1 .data 00000008 0000000000000000 0000000000000000 00000094 2**2
- CONTENTS, ALLOC, LOAD, DATA
- 2 .bss 00000004 0000000000000000 0000000000000000 0000009c 2**2
- ALLOC
- 3 .rodata 00000004 0000000000000000 0000000000000000 0000009c 2**0
- CONTENTS, ALLOC, LOAD, READONLY, DATA
- 4 .comment 0000002e 0000000000000000 0000000000000000 000000a0 2**0
- CONTENTS, READONLY
- 5 .note.GNU-stack 00000000 0000000000000000 0000000000000000 000000ce 2**0
- CONTENTS, READONLY
- 6 .eh_frame 00000058 0000000000000000 0000000000000000 000000d0 2**3
- CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
- SYMBOL TABLE:
- 0000000000000000 l df *ABS* 0000000000000000 SimpleSection.c
- 0000000000000000 l d .text 0000000000000000 .text
- 0000000000000000 l d .data 0000000000000000 .data
- 0000000000000000 l d .bss 0000000000000000 .bss
- 0000000000000000 l d .rodata 0000000000000000 .rodata
- 0000000000000004 l O .data 0000000000000004 static_var.1730
- 0000000000000000 l O .bss 0000000000000004 static_var2.1731
- 0000000000000000 l d .note.GNU-stack 0000000000000000 .note.GNU-stack
- 0000000000000000 l d .eh_frame 0000000000000000 .eh_frame
- 0000000000000000 l d .comment 0000000000000000 .comment
- 0000000000000000 g O .data 0000000000000004 global_init_var
- 0000000000000004 O *COM* 0000000000000004 global_uninit_var
- 0000000000000000 g F .text 0000000000000021 func1
- 0000000000000000 *UND* 0000000000000000 printf
- 0000000000000021 g F .text 0000000000000033 main
- RELOCATION RECORDS FOR [.text]:
- OFFSET TYPE VALUE
- 0000000000000011 R_X86_64_32 .rodata
- 000000000000001b R_X86_64_PC32 printf-0x0000000000000004
- 0000000000000032 R_X86_64_PC32 .data
- 0000000000000038 R_X86_64_PC32 .bss-0x0000000000000004
- 000000000000004b 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+0x0000000000000021
- SimpleSection.o: file format elf64-x86-64
- Sections:
- Idx Name Size VMA LMA File off Algn
- 0 .text 00000054 0000000000000000 0000000000000000 00000040 2**0
- CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
- 1 .data 00000008 0000000000000000 0000000000000000 00000094 2**2
- CONTENTS, ALLOC, LOAD, DATA
- 2 .bss 00000004 0000000000000000 0000000000000000 0000009c 2**2
- ALLOC
- 3 .rodata 00000004 0000000000000000 0000000000000000 0000009c 2**0
- CONTENTS, ALLOC, LOAD, READONLY, DATA
- 4 .debug_info 000000ed 0000000000000000 0000000000000000 000000a0 2**0
- CONTENTS, RELOC, READONLY, DEBUGGING
- 5 .debug_abbrev 00000091 0000000000000000 0000000000000000 0000018d 2**0
- CONTENTS, READONLY, DEBUGGING
- 6 .debug_aranges 00000030 0000000000000000 0000000000000000 0000021e 2**0
- CONTENTS, RELOC, READONLY, DEBUGGING
- 7 .debug_line 0000004a 0000000000000000 0000000000000000 0000024e 2**0
- CONTENTS, RELOC, READONLY, DEBUGGING
- 8 .debug_str 000000ac 0000000000000000 0000000000000000 00000298 2**0
- CONTENTS, READONLY, DEBUGGING
- 9 .comment 0000002e 0000000000000000 0000000000000000 00000344 2**0
- CONTENTS, READONLY
- 10 .note.GNU-stack 00000000 0000000000000000 0000000000000000 00000372 2**0
- CONTENTS, READONLY
- 11 .eh_frame 00000058 0000000000000000 0000000000000000 00000378 2**3
- CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
binary hacks读数笔记(objdump命令)的更多相关文章
- binary hacks读数笔记(readelf命令)
可以用readelf命令来查看elf文件内容,跟objdump相比,这个命令更详细. 1. readelf -h SimpleSection.o ELF Header: Magic: 7f 45 4c ...
- binary hacks读数笔记(nm命令)
nm命令(names):输出包含三个部分:1 符号值.默认显示十六进制,也可以指定: 2 符号类型.小写表示是本地符号,大写表示全局符号(external); 3 符号名称. 例如:nm Simple ...
- binary hacks读数笔记(od命令)
Linux od命令用于输出文件内容. od指令会读取所给予的文件的内容,并将其内容以八进制字码呈现出来 -t<输出格式>或--format=<输出格式> 设置输出格式. 实例 ...
- binary hacks读数笔记(file命令与magic file)
file命令的作用是用于检验文件的类型,并打印至终端.file命令检验文件类型按以下顺序来完成: 检验文件系统(Filesystem)中支持的文件类型. 检验magic file规则. 检验文件内容的 ...
- binary hacks读数笔记(ld 链接讲解 二)
这块将介绍一下ld链接命令的具体使用.ld的作用:ld是GNU binutils工具集中的一个,是众多Linkers(链接器)的一种.完成的功能自然也就是链接器的基本功能:把各种目标文件和库文件链接起 ...
- binary hacks读数笔记(readelf基本命令)
一.首先对readelf常用的参数进行简单说明: readelf命令是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用,下面以ELF格式可执行文件test为例详细介绍: 1. ...
- binary hacks读数笔记(ld 链接讲解 一)
首先我们先看两段代码: a.c extern int shared; int main(){ int a=100; swap(&a,&shared); } b.c int shared ...
- binary hacks读数笔记(共享库)
共享库从文件结构上来讲,与共享对象没什么区别.Linux下,共享库就是普通的ELF共享对象. 1.共享库命名: libname.so.x.y.z :其中最前面使用前缀lib,中间是库的名字和后缀&qu ...
- binary hacks读数笔记(装载)
1.地址空间 在linux系统中,每个进程拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小是由计算机硬件决定的,具体地说,是由CPU的位数决定的.比如,32位硬件平台决定的虚拟地址空间大小:0--2 ...
随机推荐
- selenium环境配置学习笔记
一 为什么进行自动化测试 缩短测试周期 避免人为出错 测试信息存储 轻易获取覆盖率 二 web/ui自动化条件和适用范围 手工测试已经完成,后期在不影响进度的前提下逐渐实现自动化 项目周期长,重复性工 ...
- go 数组指针 指针数组
package main import "fmt" func test() { var p *int // 定义指针 var a = 10 p = &a // 将a的地址赋 ...
- ImageMagick实现图片加水印(ImageMagick6.9.10)
一,ImageMagick的安装 请参见: https://www.cnblogs.com/architectforest/p/12807514.html 说明:刘宏缔的架构森林是一个专注架构的博客, ...
- 企业级RPC框架zRPC
近期比较火的开源项目go-zero是一个集成了各种工程实践的包含了Web和RPC协议的功能完善的微服务框架,今天我们就一起来分析一下其中的RPC部分zRPC. zRPC底层依赖gRPC,内置了服务注册 ...
- Docker学习笔记之-在CentOS中安装Docker
上一节演示了如何 通过Xshell连接CentOS服务,链接:Docker学习笔记之-通过Xshell连接 CentOS服务 本节将演示 如何在CentOS中安装 Docker 第一步:更新系统包到最 ...
- 500G Python从入门到进阶的视频资料
第一部分:Python资源500G百度网盘学习视频300+本电子书需要的小伙伴可以叫小编的Q群867067945 点击展开,查看完整图片 回复关键字:学习第二部分:Python就业指导 更多更详细的就 ...
- 小程序商城Mall,打造最佳SpringCloudAlibaba最佳实践
背景 由于一路一来看过很多的技术体系,也见证一些技术体系停止维护,想用自己觉得比较好的一套技术体系来做一个分布式微服务系统,包括开发层面,中间件层面和运维层面的技术,作为自己希望的一个技术团队里的技术 ...
- 彻底理解RSA加密算法
RSA是非常典型的非对称加密算法 它的算法是这样的 加密是我们把明文M转化成密文C 需要用到加密运算 而解密时我们要用解密运算将密文C转化成M 从表达式中 可以看出 e和d使我们需要确定的参数 而N是 ...
- Glide缓存图片
是用Glide加载网络图片可以自动缓存到磁盘 添加依赖: implementation 'com.github.bumptech.glide:glide:4.9.0' implementation ' ...
- vscode+WSL+Debug+Cmake+OpenGL
网页版:https://www.cnblogs.com/Jay-CFD/p/12584334.html WSL安装 参考:https://www.cnblogs.com/Jay-CFD/p/60672 ...