问个bochs调试信息的问题
下面这些是bochs的调试命令dump_cpu的输出,意思是显示cpu状态,也就是各寄存器的值,现在针对cs等哪几个段寄存器的显示不太明白,s、dl、dh、valid 各表示什么意思?去sf上看了bochs的文档,开发文档中的debugger页竟然没内容,只好来求救了,有知道的给说下啊,不胜感激。
- "eax:0x%x\n"
- "ebx:0x%x\n"
- "ecx:0x%x\n"
- "edx:0x%x\n"
- "ebp:0x%x\n"
- "esi:0x%x\n"
- "edi:0x%x\n"
- "esp:0x%x\n"
- "eflags:0x%x\n"
- "eip:0x%x\n"
- "cs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "ss:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "ds:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "es:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "fs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "gs:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "ldtr:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "tr:s=0x%x, dl=0x%x, dh=0x%x, valid=%u\n"
- "gdtr:base=0x%x, limit=0x%x\n"
- "idtr:base=0x%x, limit=0x%x\n"
- "dr0:0x%x\n"
- "dr1:0x%x\n"
- "dr2:0x%x\n"
- "dr3:0x%x\n"
- "dr4:0x%x\n"
- "dr5:0x%x\n"
- "dr6:0x%x\n"
- "dr7:0x%x\n"
- "tr3:0x%x\n"
- "tr4:0x%x\n"
- "tr5:0x%x\n"
- "tr6:0x%x\n"
- "tr7:0x%x\n"
- "cr0:0x%x\n"
- "cr1:0x%x\n"
- "cr2:0x%x\n"
- "cr3:0x%x\n"
- "cr4:0x%x\n"
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
估计相对应是segment register 的: selector、limit、base 、attributes 这几个域
恩,确实是这几个域,我对照反汇编出来的结果仔细的比了一下,确实是
复制代码
s是选择子,dl是段基址和段界限(7d5c是段基址,0049是段界限,不过,基址应该是32位,界限应该是20位才对啊,怎么这儿显示全是16位的?),dh为属性
valid具体什么意思还没搞清楚。
不对。
segment limit 是 32 位值。在 descriptor 里是 20 位,当加载进 segment register 时,会自动扩展为 32 位。
这个扩展是根据 descriptor 的 G 位来定,G = 1 时, segment limit = FFFFF (20位limit) × FFFF (4K) = FFFFFFFF (总 32 位)
所以: dl 估计是 descriptor lowest ,dh 是 descriptor hight,合成一起是 64 位值。推断这个值是整个 descriptor 值。
valid 是个附加的标志吧。根据这个 64 位值很容易得出 base,limit 及 attributes
为什么这个结构不直接定义为 base,limit 及 attribute, 是 bochs 设计人员的想法了。
是不是这样,做实验吧,BSD 版里 qiuhanty 有一些类似的分析,值得看一看
好,我去BSD版看看,晚上回去做实验,谢谢版主了啊。
刚才对照存储段描述符的结构比较了一下,确实如版主所说,dl为描述符的低32位,dh为描述符的高32位,值的对应关系也对,只是那个valid还不知道是干什么的。