ollyDbg 一款免费使用的软件,用于查看我们的执行程序。本软件作者是 Oleh Yuschuk(哦 莱 尤 -舒克)
下载地址:https://www.ollydbg.de/download.htm
解压下载的文件就可以运行,我电脑上开始运行的时候提示到有的库比系统中的版本低了,我们选择是就可以。
我简单描述下设置快捷方式
发送快捷方式: 右键-点击属性-发送桌面快捷方式。
设置管理员运行: 右键桌面快捷方式-选择顶部快捷方式-选择高级-选择用管理员身份运行(R)-确认-确认-再次运行OK.
另外这里备注下,ollyDbg只支持查看32位程序,因为博主学习的视频老师就是使用这个版本,我们就不做过多的尝试,方便快速跟上老师的节奏。如果需要查看64位的同学,可以去搜索x64Dbg试试。
首先我们用上面安装的工具打开一个任意的软件
打开ollyDbg,选择file--open--选择你要查看的exe程序(32位的)
这里我可以看到上面HEX dump 这一栏就是机器码,是十六进制的,右边的Disassembly这一列就是汇编指令。
操作:寄存器ebx的内容移动eax 中。
机器指令:1000100111011000
汇编指令:mov eax, ebx
我们可以尝试修改下指令,1000100111011000对应十六进制89D8
任意选择一行--右键--Binary(二进制)--Edit-弹出框HEX区域输入89D8,其他位设置0.--OK
这可以看到汇编区域的指令就是mov eax, ebx
可以大胆修改,这里只是修改这里内存中的值,重新打开我们查看的程序,数据是会还原的。
所以总结下,为什么要学习二进制:
反汇编引擎基本上都是十六进制展示的机器编码,而机器码真实数据就是0/1,所以了解他们之前的转换规则是必须。另外为了后面整体的学习,我们必须对各种进制和二进制之前的转换保持敏感,当然不用我们去口算,还有就是各种进制的进位规则我们必须不迷糊,要有清晰认识,这个是后面反汇编学习的基础。
组成是0--9之间的数字,到10进1,0--9,10--19,20--29,........
组成是0/1, 到2进一
以下是0-9十进制数据对应的二进制表示规则
名词解释:
末尾:从右到左的第一位, 前位:当前从右到左的上一位
转换演示:
0二进制表示: 0000
1二进制表示: 0001 (0000+1 末尾0+1得1)
2二进制表示: 0010 (0001+1,末尾1+1到2进1变0,前位0+1得1)
3二进制表示: 0011 (0010+1,末尾0+1得1,前位不变)
4二进制表示: 0100 (0011+1,末尾1+1到2进1变0,前位1+1到2进变0,再前位0+1得1)
5二进制表示: 0101 (0100+1,末尾0+1得1)
6二进制表示: 0110 (0101+1,末尾1+1到2进1变0,前位0+1得1,再前往不变)
7二进制表示: 0111 (0110+1,末尾0+1得1,前位不变)
8二进制表示: 1000 (0111+1,末尾1+1到2进1变0,前往1+1到2进1变0,再前位1+1到2进1变0,再再前位0+1得0)
9二进制表示: 1001 (1000+1,末尾0+1得1,前往不变)
组成16个字符组成,0到9,a到f。到16进1
十进制和十六进制对照表:
二进制: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
十六进制:0,1,2,3,4,5,6,7,8,9, a, b, c, d, e, f
因为到16进1,所以我们可以快速记忆几个十进制和十六进制的数据,比如:
十进制0,就是十六进制0
十进制1,就是十六进制1,
十进制.., 就是十六进制...,
十进制15,就是十六进制f
十进制16,因为满16要进1,所以就变成十六进制就10.
十进制17,就是十六进制11。
十进制18,就是十六进制12
十进制19,就是十六进制13
十进制20,就是十六进制14
综合上面我们可以得出一个快速的转换公式,就是 十进制数/16*10+余数=十六进制数
公式推导:
基本原理:十六进制每 16 进 1,每一位的权值为 16ⁿ(n≥0)。
核心操作:
取余数:用十进制数除以 16,记录余数(0-15)。
降位:将十进制数替换为商,重复直到商为 0。
逆序排列:将所有余数按逆序组合,得到十六进制数。
比如: 360十进制快速推导十六进制
360/16=22余8 记录余数8
22/16=1余6, 记录余数6
1/16=xxx余1, 记录余数1
然后逆向余数组合数就是:168
~~~~~哈哈,这里公式其实可以不用去管它,我也只是好玩就去让豆包帮忙推导了下,不过我觉的确可以帮助理解。
反过来,我可以记录几个常用的十六进制转10进制的技巧
比如十六进制10,因为十六进制十到16转进1,可以看到10就十进位以后的结果,所以十进制就应该是16,依次类推
十六进制10,就是十进制的16,
十六进制11,就是十进制的17,
十六进制1a, 就是十进制的16+10=26,
十六进制20,就是十进制的32,
十六进制30,就是十进制的48,
十六进制40,就是十进制的64,
十六进制50,就是十进制的80,
十六进制5b,就是十进制的80+11=91,
······哈哈,有兴趣的也去推导一个公式玩玩,这里就不处理了。
上一篇:汇编语言学习前言
下一篇: 汇编学习之《数据寄存器》