不苦小和尚 发表于 2020-2-6 14:26

对于一个指令反汇编的问题 帖子的个人解析

本帖最后由 不苦小和尚 于 2020-2-6 20:01 编辑

昨天晚上看到一个网友发来的帖子,地址如下:https://www.52pojie.cn/thread-1099125-1-1.html
里面主要讲了对于 8378 18 00这条指令翻译的问题
下面就来讲讲我自己的理解,不对的地方请大家指出。
首先我们先根据第一个字节83,到OPCODE表里查找,结果如下

查出来是Immediate Grp 1,说明这个包含了多条指令的
要根据后面的一个字节的ModR/M确定相应的指令
操作数中含有Ev符号,那么紧跟后面的一个字节78就是MODR/M,操作码为Group的时候后面必须紧跟ModR/M
总上所述,指令暂时可以解析为:
Grp1 Ev,Ib
到现在还无法确切知道指令和操作数的内容
ModR/M = 78
78的二进制 0111 1000
拆分的ModR/M = 01 |111 |000 (Mod : 01 , Reg: 111 , R/M: 000)
首先参考Group指令表查看对应的指令由 Reg的可以推断出指令为 CMP

可以推断出指令格式为:CMP Ev, Ib

此时指令可以被解析为:CMP + disp8, IbCMP , Ib   //Dis8 就是表 8位大小的位移Disp8就代表一个字节大小,
指令可以解析为:CMP , IbIb可以解析为一个字节的立即数,
由于在win32系统中一个里立即数占用4个字节,
所以最后的指令就可以翻译为:CMP DWORD PTR , 0   

liu5653250 发表于 2020-2-6 17:39

打卡签到免被清理!

女萝岩 发表于 2020-2-6 18:48

写的挺好的,又帮我加深了一遍印象。不过
CMP
这种写法我个人觉得容易被误解,最好还是换一种写法。并不是disp8的三次方,这个3是可有可无的,它其实是一种注释,从上面顺序排下来的,正好排到了3.



在手册中有关于注释3的说明


不苦小和尚 发表于 2020-2-6 20:00

女萝岩 发表于 2020-2-6 18:48
写的挺好的,又帮我加深了一遍印象。不过
CMP
这种写法我个人觉得容易被误解,最好还是 ...

原来如此,谢谢了

qws1855 发表于 2020-2-6 20:03

感谢分享

有辆卡卡 发表于 2020-2-6 21:19

谢谢分享

大大PPQ 发表于 2020-2-7 19:40

真的学习了

JFZ-Jerry 发表于 2020-2-7 20:38

谢谢分享帮助理解

q510 发表于 2020-2-11 21:02

看不懂啊
页: [1]
查看完整版本: 对于一个指令反汇编的问题 帖子的个人解析