art of disassembly----chapter01----lesson11---how is a disassembler working----01
来源:互联网 发布:php上传图片并压缩 编辑:程序博客网 时间:2024/05/21 09:46
关于此文档的内容:
此文件是关于设计及实现一个WIN32的反汇编器。它读取winodws32位下的可执行程序的机器码然后将其反汇编,并显示出来。
关于此文档的目的:
除作为我个人的学习比较以外,本文档更着重于为那些对写反汇编器感兴趣的人而写。我可提供了一些源代码以供下载。代码中有一些我写的简单的注释,但是有相当的一部分还是难以理解的,除非你对整体的设计有一个全局的把握。本文档正是为了填补这个空白。
很遗憾的是,任何人有都无法给出写一个反汇编器的所有细节。再者,我也没说我的设计及实现是最好的。事实上,这个项目更多的是我自学,则不是向他人炫耀。我的最动机只是想写一个框架就好了,然后别人可以适当的夸张这个框架。
“Open ended implementation"
这个标题的意思是:我的实现基本上是算完成的,非常欢迎你可以加入这个项目完成我的些未完成的部分。要开始你自己的Decoder是很简单的,你只在copy dlls然后使用他们就可以了。
不过到最后我还是会完成我自己未写完的那些部分的。
注意:‘
我不曾有任何有保证说我的设计及实现是最有效率的、是正确的。我只是想展示我自己是怎么解决这个问题罢了,它应该跟你的方法有点不同吧。
我做出以下几个假设:
----使用VC++做为编译器
-----要反汇编的可执行文件是由MS的工具编译而成的(当然你可以很容易的扩展)
------局限于32位的可执行文件
简介:
Q:反汇编机器码到汇编看起来相当的复杂。当你看到intel的指令手册时你可能就意味到这个问题了。但是如果把此任务分解成几个小的任务的话,你会发现其实它并没有这么的难。
当你想到反汇编的时候,以下问题maybe会浮现在你的脑海之中
--------机器码长啥样
---------机器码怎么跟汇编指令对应起来
----------我怎么得到机器码从哪里开始?
-----------我需要什么样的文档资料
以上问题在您学习这个文档的过程中,将会一一的了然起来的!!
现在来总揽一下整体的架构吧!
数据表示的几个阶段
我们的数据是一串机器码的字节流。反汇编器再怎么说也只不过是一个软件,它把这些字节流转换成汇编。这个转换的过程可以分成几个小的步骤。为了了解到底需要将这个过程分解成几个步骤,让我们先来了解一下数据会经历几个表示阶段。以下的内容展示数据的三个基本的阶段。
第一阶段:数据处理之前。数据就是一串字节流,它们对硬件处理器有意义。这里要注意的是这一串字节流并没有明显有意义的边界。
第二阶段:分解的机器码。我们把这串字节流分解成一系列的更小的几组字节(依旧是机器码),我将之称为"raw instructions"(下文缩写为RI)。每一个RI对应一相应的intelX86汇编指令。如果在这个阶段之下将数据呈现给用户,那么用户看到的将是一组组不等长的十六进制数。
第三阶段:汇编指令。我们将每个RI转换为一行行为字母及数字组成的汇编语言指令。如果数据在此阶段呈现给用户,那么用户将看到的汇编语言指令。
两个处理任务:
通过学习数据将会经历的三个阶段,我们将面临两个处理任务。
首先,我们得在第一阶段及第二阶段之间架起一架桥梁,我将此程序叫做 Parsing...
其次,第二阶段到第三阶段的转换程序我将叫做 Decoding..它所做的就是把字节码翻译成人可读的形式
这两个处理任务可以合并在一个子程序中,但是我想把它们分成两个子程序会更好理由如下:
Parsing子程序负责处理分析字节流,也就是说,是它来决定在一串字节流中,要多少个字节的数据来构成一条汇编指令。再者,Decoding子程序并不关心一条指令对应有几个字节的数据,它的任务是把机器码翻译成人类可读的汇编语言代码的形式。
- art of disassembly----chapter01----lesson11---how is a disassembler working----01
- art of disassembly----chapter01----lesson11---how is a disassembler working----02
- art of disassembly----chapter01----lesson11---how is a disassembler working----03
- art of disassembly---chapter01---lesson2
- art of disassembly----chapter01---lesson3
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---01
- the art of disassembly chapter01---lesson1--02
- the art of disassembly chapter01-----lesson1--03
- art of disassembly-------chapter01--lesson1----04
- art of disassembly---chapter01---lesson6---Link lists
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---02
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---03
- art of disassembly----chapter01----lesson9--Opcodes and Mnemonics---04
- the art of disassembly charpter01---lesson1---01
- how to write a module dumper & disassembler
- how to write a module dumper & disassembler
- A summary of asking how someone is
- Disassembly of the MBR
- MongoDB运行状态、性能监控,分析
- 关于GetWindowRect()、GetClientRect()和SetWindowRgn()的问题
- pubwin2009收银伴侣破解版
- DEFY添加联系人时出现“进程:com.motorola.contacts 意外停止”
- 数据库基础知识
- art of disassembly----chapter01----lesson11---how is a disassembler working----01
- 关于线程池的需求性
- 切记,切忌!——转载(收藏以备用)
- 有关const关键字的整理
- iOS与Android开发者,到底谁挣的多?
- java中this的用法
- VC++新建工程里面各项的含义
- vc++ 与 android/java 进行socket通信
- nginx+tomcat实现动静分离