stevenmtroy 发表于 2016-3-16 17:54:59

关于用visual studio反汇编出来的结果

本帖最后由 stevenmtroy 于 2016-3-17 09:26 编辑

刚学完8086汇编,用visual studio反汇编出来的结果,请问每行前面那些十六进制数是什么含义?后面那一部分应该是每行的指令对应的机器码,那前面那部分比如000E39A6,000E39A7那些又是什么意思呢?还有那一大堆的问号又是什么含义呢?

人造人 发表于 2016-3-16 18:28:56

前面那些十六进制是地址,指令的地址

兰陵月 发表于 2016-3-16 19:44:35

1、000E39XX什么的都是十六进制的地址。
2、现在的CPU早已经支持32位,64位,所以寻址方式不需要再用段地址:偏移地址的方式。
3、段地址:偏移地址的方式是8086CPU里面的寻址方式,这是因为8086CPU是16位的,而8086CPU的地址总线是20位。20位地址总线理论上可寻址的大小为2的20次方,即1024KB,而8086CPU如果直接采用四位的十六进制表示地址的话,则只能表示64KB,这样将导致1024KB-64KB的空间计算机将会利用不到,因此就出现段地址:偏移地址的表示方式。
4、段地址:偏移地址的本质是,段地址X16+偏移地址,这样得到的就是一个5位十六进制的地址值(即20位二进制)。
5、32位地址的理解:上面的地址值有8个十六进制数字,你应该知道1个16进制数字相当于4个二进制数字,因此8X4=32位。32位地址可寻址空间为:2的32次方,有4096M大小(4G)。
6、VC反编译出来的就是32位地址。
7、??代表无意义的东西,你也可以理解为0之类的玩意,反正就是没用,不用管。以后反汇编注入代码时,可以把要注入的代码放在这些地方。

stevenmtroy 发表于 2016-3-17 09:25:20

多谢,问题已解决

stevenmtroy 发表于 2016-3-17 09:26:01

多谢啦,讲得很清楚,问题已解决
页: [1]
查看完整版本: 关于用visual studio反汇编出来的结果