【发布时间】:2016-04-02 10:04:11
【问题描述】:
我有一个使用 gcc 编译的简单 c 程序的二进制文件。 我正在编写自己的反汇编程序,我能够从 ELF 文件中读取 ELF 标头和其他标头。
我正在从 ELF 二进制文件中读取“.text”部分。并尝试将操作码转换为助记符/汇编指令。
如何将原始操作码/机器码转换为助记符/汇编指令?? C源代码为:
#include <stdio.h>
int main()
{
int i = 10;
int j = 22 + i;
return 0;
}
以下是我在读取 ELF 文件后收到的原始操作码示例:
55 ffffff89 ffffffe5 ffffff83 ffffffec 20 ffffffc7 45 ffffffec 3 ffffffc7 45
fffffff0 41 ffffffc7 45 fffffff4 8 ffffffc7 45 fffffff8 21 ffffff8b 45
ffffffec ffffff83 ffffffc0 16 ffffff89 45 fffffffc ffffffb8 ffffffc9 ffffffc3
【问题讨论】:
-
您的反汇编程序可能需要包含所有操作码的列表以及它们对应的指令,并且还必须解析所有前缀以及 ModR/M 和 SIB 字节。你可以在Intel's manuals找到所有这些信息。
-
您需要修复您的代码,使其在打印之前不会将 8 位值符号扩展为 32 位。
-
使用
unsigned char读取操作码值,并使用%02x打印。 -
我投票结束这个过于宽泛,因为问题询问如何编写反汇编程序而不显示任何努力。 (OP is already knowledgeable of
objdump) -
您使用免费提供的英特尔指令参考。