修改可执行文件,改变程序走向,把jne 改成je
来源:互联网 发布:人脸识别asm算法 编辑:程序博客网 时间:2024/05/29 11:42
1. 准备样本程序源代码
#include <stdio.h>#include <unistd.h>void main(){ char buf[1]={0}; while(1){ if(buf[0]==0){ printf("11111\n"); } else{ printf("22222\n"); } sleep(1); };}
2. 编译生成a.out
$ gcc a.c
3. 运行输出:
$ ./a.out 111111111111111
4. 反汇编
$objdump -d a.out >a.S
5. 查看法反汇编出来的代码,main函数部分
0000000000400586 <main>: 400586: 55 push %rbp 400587: 48 89 e5 mov %rsp,%rbp 40058a: 48 83 ec 10 sub $0x10,%rsp 40058e: c6 45 ff 00 movb $0x0,-0x1(%rbp) 400592: 0f b6 45 ff movzbl -0x1(%rbp),%eax 400596: 84 c0 test %al,%al 400598: 75 0c jne 4005a6 <main+0x20> 40059a: bf 50 06 40 00 mov $0x400650,%edi 40059f: e8 ac fe ff ff callq 400450 <puts@plt> 4005a4: eb 0a jmp 4005b0 <main+0x2a> 4005a6: bf 56 06 40 00 mov $0x400656,%edi 4005ab: e8 a0 fe ff ff callq 400450 <puts@plt> 4005b0: bf 01 00 00 00 mov $0x1,%edi 4005b5: e8 c6 fe ff ff callq 400480 <sleep@plt> 4005ba: eb d6 jmp 400592 <main+0xc> 4005bc: 0f 1f 40 00 nopl 0x0(%rax)
6. 注意
if(buf[0]==0){对应
400598: 75 0c jne 4005a6 <main+0x20>
7. bvi打开文件,定位到 0x598周围数据如下
$ bvi a.out
0000058C EC 10 C6 45 FF 00 0F B6 45 FF 84 C0 75 0C BF 50 06 40 00 E8 ...E....E...u..P.@..000005A0 AC FE FF FF EB 0A BF 56 06 40 00 E8 A0 FE FF FF BF 01 00 00 .......V.@..........
8. 把0x598处 0x75改成 0x74
0000058C EC 10 C6 45 FF 00 0F B6 45 FF 84 C0 74 0C BF 50 06 40 00 E8 ...E....E...u..P.@..000005A0 AC FE FF FF EB 0A BF 56 06 40 00 E8 A0 FE FF FF BF 01 00 00 .......V.@..........
9. 保存,并执行,查看输出
$ ./a.out 2222222222
成功改变if判断走向。
说明:0x75 对应 汇编指令jne, 0x74 对应汇编指令 je
修改后的文件反汇编出来的代码main 部分如下
0000000000400586 <main>: 400586: 55 push %rbp 400587: 48 89 e5 mov %rsp,%rbp 40058a: 48 83 ec 10 sub $0x10,%rsp 40058e: c6 45 ff 00 movb $0x0,-0x1(%rbp) 400592: 0f b6 45 ff movzbl -0x1(%rbp),%eax 400596: 84 c0 test %al,%al 400598: 74 0c je 4005a6 <main+0x20> 40059a: bf 50 06 40 00 mov $0x400650,%edi 40059f: e8 ac fe ff ff callq 400450 <puts@plt> 4005a4: eb 0a jmp 4005b0 <main+0x2a> 4005a6: bf 56 06 40 00 mov $0x400656,%edi 4005ab: e8 a0 fe ff ff callq 400450 <puts@plt> 4005b0: bf 01 00 00 00 mov $0x1,%edi 4005b5: e8 c6 fe ff ff callq 400480 <sleep@plt> 4005ba: eb d6 jmp 400592 <main+0xc> 4005bc: 0f 1f 40 00 nopl 0x0(%rax)
0 0
- 修改可执行文件,改变程序走向,把jne 改成je
- 8086条件转移指令JE/JZ,JNE/JNZ
- 如何把JAVA程序作成可执行文件
- 把asp程序封装成可执行文件
- 指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL
- 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL
- 汇编指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、
- 汇编语言INC DEC JGE JG JLE JL JNE JE 都是什么意思
- 计划把财务管理程序改成一个eclipse的插件
- win32控制台程序隐藏和可执行文件图标改变
- 使用 cx_freeze 把python程序编译成可执行文件
- 把一个shell程序编译成二进制可执行文件
- 利用PyInstaller把Python程序打包成exe可执行文件
- 用Pyinstaller把Python3.4程序打包成可执行文件exe
- C++ :函数中无需改变传入参数的值时,定义时把 “Item & x ” 都改成 \"const Item & x\"
- [VB.NET]帮忙把下面这段web的程序改成vb.net
- 把linux系统改成中文版
- 把网站改成灰度模式
- 希尔(shell)排序原理分析及Java实现
- [android]DatePickerDialog.OnDateSetListener 不会回调三星设备上
- 有投过 Acta Tropica 的吗
- 百度天气预报接口介绍--职坐标
- c#线程同步的总结(摘抄)
- 修改可执行文件,改变程序走向,把jne 改成je
- webservice解读 (2)
- CQOI2016爆炸记
- HDU 3836 —— Equivalent Sets
- HttpPost实现Request Payload
- SpringMVC+Spring+Mybatis+Mysql项目搭建
- socket
- Netty in Action (十二) 第五章节 第一部分 简介ByteBuf
- iOS开发系列--通知与消息机制