当前位置: 代码迷 >> 汇编语言 >> 汇编语言的一个有关问题请问
  详细解决方案

汇编语言的一个有关问题请问

热度:2011   发布时间:2013-02-26 00:00:00.0
汇编语言的一个问题请教

为什么 DB 'DGEGEGE$' 反汇编后会是下面的个样子,是什么意思?谢谢
DEGBUG

-A109
0B0D:0109 DB 'DGEGEGE$'
OBOD:0111

-U109,111
OBOD:0109 44 INC SP
OBOD:010A 47 INC DI  
OBOD:010B 45 INC BP
OBOD:010C 47 INC DI
OBOD:010D 45 INC BP
OBOD:010E 47 INC DI
OBOD:010F 45 INC BP
OBOD:0110 244F AND AL,4F
OBOD:


 

------解决方案--------------------------------------------------------
数据和指令在cpu看来是一样的,所以一些随机的数据碰巧组成一段指令码
也没什么稀奇。
------解决方案--------------------------------------------------------
'DGEGEGE$'对应的ASCII码是44 47 45 47 45 47 45 24;而将这些数据反汇编成指令的就是你上面的指令了;其实cpu也是抓一个机器码去执行的。如果让CPU跳到数段去执行,它也是会去抓机器码执行,但是现在执行的内容并不是你的预期,就出现所谓的死机了(cpu在乱跑)
------解决方案--------------------------------------------------------
24 就是 '$'
------解决方案--------------------------------------------------------
不知道楼主看这个有什么意义,当把数据当作指令来翻译时,cpu会根据它的理解组合指令,'a$'中的'$'被组合在了'$b'(2462)中,这是因为cpu认为61即'a'是一个指令,'$b'即2462是一个指令
------解决方案--------------------------------------------------------
内存种一起都是数据,被用来执行,就可以看作是指令.



------解决方案--------------------------------------------------------
cpu分不清代码和数据,cpu就认为ip(16位), eip(32位),rip(64位)寄存器指向的是代码,哪怕他指向的不是代码,这时cpu在执行这段"代码"时,会发生非法指令异常,就像你用u地址,就把地址处的内容当成指令,d地址就把地址处内容当成数据来查看,其实都是同一数据的不同解释
  相关解决方案