一个简单的可移植可执行文件如下所示:



我想知道反汇编程序如何解析.text ...以产生汇编代码?

因为原始格式的PE文件似乎无法使用,并且不包含可读格式的机器指令。

我在考虑使用分层程序,还是将程序加载到内存中,然后由反汇编程序执行转储。

谢谢!

评论

说明不会立即跟随该文本.text。您正在查看目录;名称后的二进制数字表示偏移量和长度,在整个文件中可以找到实际的代码。

Google“ PE格式”。这就是IDA Pro中装载机的部分用途。 msdn.microsoft.com/zh-CN/library/ms809762.aspx

它可能具有一个字节模式以与功能前导匹配,并从此处开始。更不用说起始地址在文件中的某处明确声明了

#1 楼

您基本上有两个选择:

线性扫描

读取前N个字节,直到获得正确的操作码(例如,05 14 00 00 00进行反编译以添加eax,0x14 )。反汇编下一个操作码。您将阅读一些数据部分并获得无效的操作码。您可以跳过该过程或将这些“指令”标记为错误,然后继续进行操作,直到获得下一个有效的操作码并按照说明进行操作为止。个字节,直到获得正确的操作码。继续进行操作,直到您拆卸任何形式的弹跳,存储当前位置,跟随弹跳并按照说明进行操作。当您收到无效的操作码时,请停止反汇编,然后恢复到先前存储的位置。

这两种方法都需要一些基本信息,如


程序代码从哪里开始?
代码使用什么体系结构?

其中一些信息是标头的一部分(例如,在PEEL ELF文件中)。交互式反汇编程序(LIDA)简短介绍了程序如何反汇编代码以及objdump如何工作。这是熟悉该主题的一个很好的起点。

#2 楼

有多种方法可以反汇编文件。请注意,.text只是该段的名称,对于所有操作系统,您都可以将其称为.flups。

有趣的是:


OEP在该部分中
该部分具有“读取”和“执行”权限。 x86asm.net/)。它可以从上至下开始阅读,也可以枚举结果,例如跟随调用/ jmps以查找奇怪的代码。从这里开始。这是为您准备的OEP。

阅读radar源代码可以帮助您真正地了解反汇编程序。

#3 楼

在拥有原始的PE,ELF等文件之间,确实需要进行大量处理,以便能够对其进行反汇编并显示在一个不错的UI中:加载和解析文件,处理可执行节,将偏移量转换为虚拟地址,助记符反汇编本身,对反汇编指令各部分的注释,例如交叉引用代码/数据的不同部分并轻松地在它们之间进行导航等。

有许多开源反汇编程序,您可以研究其代码以深入了解内部工作原理(或为提高工作效率而进行改进)。您的需求!)。例如,ScratchABit用Python编写,非常容易学习和破解。