-
-
调试一个DOS程序遇到问题。
-
发表于:
2008-1-27 10:10
5874
-
很久没有来了,向各位问好啊!
为了研究16位程序的段组织结构情况,今天用Ida反汇编了一个16位的c程序,查看了一下各段信息,如下:
其中可用看到3个段,代码段,数据段,堆栈段。可是为什么IDA没有显示出CS和SS寄存器的内容?按理说DS跟SS的地址是不同的。可是下面就遇到相同的情况了。我被搞迷糊了!
用turbo debugger 调试此程序的时候,发现段ds寄存器,ss寄存器内容是一样的,也就是说原来程序内的堆栈段没有使用??而是跟数据段合用的?这是为什么?请高手解答一下!多谢!
我的问题是:为什么在IDA内看不到SS,CS寄存器内容?为什么在TD内看到的SS,DS都是在相同段内?按IDA的显示,应该在不同地址才对。
另外看不懂IDA反汇编的如下代码:
关于栈段的定义开始部分:
Uninitialized
120A:0000 seg002 segment byte stack 'STACK' use16
120A:0000 assume
cs:seg002
120A:0000 assume es:nothing, ss:seg002, ds:dseg, fs:nothing, gs:nothing
120A:0000 byte_120A0 db 80h dup(0)
120A:0000 seg002 ends
这是栈的定义,不知为什么在堆栈定义区使用 assume cs:seg002,这个什么意思啊?
代码段的开始是:
; Segment type: Pure code
1000:0000 seg000 segment byte public 'CODE' use16
1000:0000 assume cs:seg000
1000:0000 assume es:nothing, ss:seg000, ds:nothing, fs:nothing, gs:nothing
1000:0000 ; 圹圹圹圹圹圹圹?S U B R O U T I N E 圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹圹?
1000:0000 ; Attributes: library function
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!