汇编学习之《工具安装和进制学习》

学习工具安装

ollyDbg 一款免费使用的软件,用于查看我们的执行程序。本软件作者是 Oleh Yuschuk(哦 莱 尤 -舒克

下载地址:https://www.ollydbg.de/download.htm

汇编学习之《工具安装和进制学习》_第1张图片

解压下载的文件就可以运行,我电脑上开始运行的时候提示到有的库比系统中的版本低了,我们选择是就可以。

另外会提醒如下,我们选择设置管理员权限运行就可以了。汇编学习之《工具安装和进制学习》_第2张图片

我简单描述下设置快捷方式

发送快捷方式: 右键-点击属性-发送桌面快捷方式。

设置管理员运行: 右键桌面快捷方式-选择顶部快捷方式-选择高级-选择用管理员身份运行(R)-确认-确认-再次运行OK.

另外这里备注下,ollyDbg只支持查看32位程序,因为博主学习的视频老师就是使用这个版本,我们就不做过多的尝试,方便快速跟上老师的节奏。如果需要查看64位的同学,可以去搜索x64Dbg试试。

为什么学习二进制

首先我们用上面安装的工具打开一个任意的软件

打开ollyDbg,选择file--open--选择你要查看的exe程序(32位的)

汇编学习之《工具安装和进制学习》_第3张图片

这里我可以看到上面HEX dump 这一栏就是机器码,是十六进制的,右边的Disassembly这一列就是汇编指令。

操作:寄存器ebx的内容移动eax 中。

机器指令:1000100111011000

汇编指令:mov eax, ebx

我们可以尝试修改下指令,1000100111011000对应十六进制89D8

汇编学习之《工具安装和进制学习》_第4张图片

任意选择一行--右键--Binary(二进制)--Edit-弹出框HEX区域输入89D8,其他位设置0.--OK

汇编学习之《工具安装和进制学习》_第5张图片

汇编学习之《工具安装和进制学习》_第6张图片

这可以看到汇编区域的指令就是mov eax, ebx

汇编学习之《工具安装和进制学习》_第7张图片

可以大胆修改,这里只是修改这里内存中的值,重新打开我们查看的程序,数据是会还原的。

所以总结下,为什么要学习二进制:

反汇编引擎基本上都是十六进制展示的机器编码,而机器码真实数据就是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+余数=十六进制数

公式推导:

  1. 基本原理:十六进制每 16 进 1,每一位的权值为 16ⁿ(n≥0)。

  2. 核心操作:

    • 取余数:用十进制数除以 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,

······哈哈,有兴趣的也去推导一个公式玩玩,这里就不处理了。

上一篇:汇编语言学习前言

下一篇: 汇编学习之《数据寄存器》

你可能感兴趣的:(逆向工程之汇编学习,汇编,学习)