汇编 if else
知识点: if else 逆向还原代码一、了解if else结构 sub esp,8 00401029 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 0040102C |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8] 0040102F |. 7E 10 JLE SHORT ifelse01.00401041 //表示 else部分的开始 00401031 |. 68 FC204000 PUSH ifelse01.004020FC ; /format = "a>b" 00401036 |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf 0040103C |. 83C4 04 ADD ESP,4 0040103F |. EB 0E JMP SHORT ifelse01.0040104F //结合前边的 jle 401041 判断是否有else部分 00401041 |> 68 00214000 PUSH ifelse01.00402100 ; /format = "b>=a" 00401046 |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf 0040104C |. 83C4 04 ADD ESP,4二、逆向还原代码int a,b,c; //00401006 |. 68 F4204000 PUSH ifelse01.004020F4 ; /format = "begin" //0040100B |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf //00401011 |. 83C4 04 ADD ESP,4printf("begin"); //00401014 |. C745 FC 01000>MOV DWORD PTR SS:[EBP-4],1 //0040101B |. C745 F8 02000>MOV DWORD PTR SS:[EBP-8],2 //00401022 |. C745 F4 03000>MOV DWORD PTR SS:[EBP-C],3 a=1,b=2,c=3; //00401029 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] //0040102C |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8] //0040102F |. 7E 10 JLE SHORT ifelse01.00401041 if (a>b) { //00401031 |. 68 FC204000 PUSH ifelse01.004020FC ; /format = "a>b"//00401036 |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf//0040103C |. 83C4 04 ADD ESP,4//0040103F |. EB 0E JMP SHORT ifelse01.0040104Fprintf("a>b"); }else { //00401041 |> 68 00214000 PUSH ifelse01.00402100 ; /format = "b>=a"//00401046 |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf//0040104C |. 83C4 04 ADD ESP,4printf("b>=a"); } //0040104F |> \8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] ; c //00401052 |. 3B4D F8 CMP ECX,DWORD PTR SS:[EBP-8] ; b //00401055 |. 7E 46 JLE SHORT ifelse01.0040109D ; if (c>b) if (c>b) { //00401057 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] c //0040105A |. 3B55 FC CMP EDX,DWORD PTR SS:[EBP-4] a //0040105D |. 7E 20 JLE SHORT ifelse01.0040107Fif (c>a){ //0040105F |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] //00401062 |. 50 PUSH EAX ; /<%d> //00401063 |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] ; | //00401066 |. 51 PUSH ECX ; |<%d> //00401067 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8] ; | //0040106A |. 52 PUSH EDX ; |<%d> //0040106B |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] ; | //0040106E |. 50 PUSH EAX ; |<%d> //0040106F |. 68 08214000 PUSH ifelse01.00402108 ; |format = "%d>%d,%d>%d" //00401074 |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf //0040107A |. 83C4 14 ADD ESP,14printf("%d>%d,%d>%d",c,b,c,a); //0040107D |. EB 1E JMP SHORT ifelse01.0040109D}else{ //0040107F |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] //00401082 |. 51 PUSH ECX ; /<%d> //00401083 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; | //00401086 |. 52 PUSH EDX ; |<%d> //00401087 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; | //0040108A |. 50 PUSH EAX ; |<%d> //0040108B |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C] ; | //0040108E |. 51 PUSH ECX ; |<%d> //0040108F |. 68 14214000 PUSH ifelse01.00402114 ; |format = "%d>%d,%d<=%d" //00401094 |. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf //0040109A |. 83C4 14 ADD ESP,14printf("%d>%d,%d<=%d",c,b,c,a);} } //0040109D |> 33C0 XOR EAX,EAX
转载于:https://www.cnblogs.com/whzym111/p/6369144.html
汇编 if else相关推荐
- GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)
C 或者 C++ 程序从源代码生成可执行程序的过程,需经历 4 个过程,分别是预处理.编译.汇编和链接. 同样,使用 GCC 编译器编译 C 或者 C++ 程序,也必须要经历这 4 个过程.但考虑在实 ...
- 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...
- 经常使用ARM汇编指令
一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...
- 初学 Delphi 嵌入汇编[3] - 第一个 Delphi 与汇编的例子
前面知道了一个汇编的赋值指令(MOV), 再了解一个加法指令(ADD), 就可以做个例子了. 譬如: ADD AX,BX; 这相当于 Delphi 中的 AX := AX + BX; 另外提前来个列表 ...
- Linux 应用程序 嵌汇编,Linux下C语言嵌汇编
Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...
- arm linux 启动之一:汇编启动到start_kernel
描述arm linux启动的概要过程,以S5PV210(Cortex A8)为例,本文描述第一个阶段. 一.arm linux的引导 uboot在引导arm linux(uImage镜像)到SDRAM ...
- 32位汇编寄存器及汇编指令
32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和 ...
- 祝贺《WCF邮件通信系统》在高阳市场研究汇编第五期发表
上次给公司的市场研究汇编投稿,只写了一个PPT格式的<WCF邮件通信系统>,编辑把它整理成了PDF格式的内容,感觉很好,所以我把PDF原文中的有关内容存储成了图片,发表在这里,庆贺一下. ...
- ATT汇编语言与GCC内嵌汇编简介
AT&T汇编语言与GCC内嵌汇编简介 1 AT&T 与INTEL的汇编语言语法的区别 1.1大小写 1.2操作数赋值方向 1.3前缀 1.4间接寻址语法 1.5后缀 1.6指令 2 G ...
- Linux下的ATT语法(即GNU as 汇编语法)入门
学习这么长时间,一直在C语言这一层面上钻研和打拼,日积月累,很多关于C的疑惑在书本和资料中都难以找到答案.程序员是追求完美的一个种群,其头 脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁.不久前在it ...
最新文章
- 如何检查一个Python字符串是否只包含数字?
- Centos 6 克隆导致网卡eth0变成eth1、及修改网卡名的方法
- iOS设计模式(02):单例模式
- jsonp解析 html
- DHCP服务搭建(1)
- Ubuntu18.04安装VCS、Verdi、dve全套教程亲测(有成功截图)
- win系统如何连接共享服务器,window7 pro 访问局域网内共享服务器
- kratos的返回值问题与错误返回问题
- php 检测变量中的回车键_PHP 的变量类型,变量检测
- FPGA状态机一段式
- 华为机试HJ32:密码截取
- hdu 1358 Period (KMP求循环次数)
- 标准软件开发过程 文档
- 浅析 Redis 复制
- CSDN上传资源无法设置积分了吗
- Jetpack LiveData
- 老A:抖音爆火的“弹幕互动游戏”是什么?该如何搭建直播间?
- 二、Vue 属性绑定、v-model的原理、绑定class、绑定style
- 汇通达再度冲刺港交所上市:整体毛利率低下,已有股东提前退出
- world quant global alphathon 全球总决赛 第二名经验分享
热门文章
- 熔池 沉积_用于3D打印的AI(第3部分):异常熔池分类的纠缠变分自动编码器
- 深入浅出SQL(1)
- 哪些钱借了可以不还?
- 《斑点狗眼里的世界》一书的铅笔画插图
- 胡玥的侦探小说《做局》及自传《时间之夜》
- Invert Binary Tree
- python self理解_Python面向对象总结,让你快速掌握面向对象常用的用法
- python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法
- linux gcc中sin30度,学习gcc.pdf
- 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)