2012-07-13 61 views
-5

我想在二进制文件中显示汇编指令,但我该怎么办?
我如何知道MOV(例如)的参数是指针还是数字?
这是用于教育目的,我知道有GDB和其他工具。在二进制文件中显示汇编的C程序

在此先感谢!

+0

上我肯定会看一些反汇编程序的源代码以获得更好地了解这是如何完成的。 x86非常复杂,涉及很多,但仍然可以做,只是准备好处理大量边缘案例。 – sean 2012-07-13 13:00:50

+0

处理器可以通过查看操作码来判断。在开始使用x86之前,我将从一些其他指令集开始。 (硬件与它无关) – 2012-07-13 13:47:18

回答

1

您的意思是一个disassembler?那么你有很多的工具,挑选,如:

  • OllyDbg的
  • IDA
  • objdump的

如果要将此集成到现有的程序,那么你就需要拆卸发动机如BeaEngine或diStorm。

+0

感谢您的回复,我认为beaengine是我正在寻找的东西,但我如何使用它? gcc -g -I include -L lib/Linux.gnu.Debug -l BeaEngine_s_d disass_test.c使用编译的库并包含beaengine头文件,但是我仍然有:未定义的对BeaEngineVersion的引用,我错过了什么?再次感谢 – 2012-07-14 11:56:44

1

您可以利用许多内部binutils图书馆像BFD操作码

BFD二进制文件描述符库,做低级别的操作。

操作码库用于组装和拆卸机器说明。

0

您可能会发现从源到emulator有用的信息,它具有执行模拟指令之前执行相同的解码任务。

我强烈建议先针对一小部分,最好是裸8086,然后添加扩展他们在历史上发生过相同的序列。这将帮助您在查找更多信息时决定要忽略哪些内容。以免淹没。

对于MOV操作,操作数被第二字节中,MOD-REG-REG/MEM字节指定(在最一般的形式)。操作数几乎总是寄存器或内存位置(指针,可能使用“索引寄存器”即时构建)。只有少数的指令接受文字操作数(数字),仅作为,他们都清楚地标明在该表中,1979 8086 Manual,第180页。