我正在为实验室开发一个操作系统项目,需要处理指令指针和指令操作码。目前,我只需要知道指令的类型。为此,我正在从指令指针指向的地址读取数据。这个数据的第一个字节告诉我指令的类型。例如,如果第一个字节是
其次,我的第二个优先事项是查找指令的操作数。我不知道如何通过代码来完成这个任务。任何样例代码都将不胜感激。
第三个问题是要找出指令的大小。由于x86指令集长度可变,因此我想知道每个指令的大小。起初,我计划使用一个查找表来维护指令名称和其大小。但后来我发现,同一指令的长度可能不同。例如,当我在
所以我需要这些问题的答案。如果有人能给我一些解决方案,我将不胜感激。
0xC6
,那么它就是一个MOVB
指令。现在有一些情况,当指令指针的第一个字节是0x0F
时,根据文档,0x0F
表示这是一个两个字节的指令。我的问题是如何找出这种类型的指令的指令类型。其次,我的第二个优先事项是查找指令的操作数。我不知道如何通过代码来完成这个任务。任何样例代码都将不胜感激。
第三个问题是要找出指令的大小。由于x86指令集长度可变,因此我想知道每个指令的大小。起初,我计划使用一个查找表来维护指令名称和其大小。但后来我发现,同一指令的长度可能不同。例如,当我在
.o
文件上使用对象转储时,我发现了两条指令:C6 00 62
和C6 85 2C FF FF FF 00
。在这里,两个指令的类型是相同的(C6
),但长度不同。所以我需要这些问题的答案。如果有人能给我一些解决方案,我将不胜感激。
gdb
,objdump
)。并且阅读文档! - rodrigo