<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://gentoo-zh.org/extern.php?action=feed&amp;tid=302&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Gentoo中文社区 / bochs 调试 com 文件]]></title>
		<link>http://www.gentoo-zh.org/viewtopic.php?id=302</link>
		<description><![CDATA[bochs 调试 com 文件 最近发表的帖子。]]></description>
		<lastBuildDate>Fri, 26 Aug 2022 06:03:12 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[bochs 调试 com 文件]]></title>
			<link>http://www.gentoo-zh.org/viewtopic.php?pid=308#p308</link>
			<description><![CDATA[<p>在网上看到2中解决此问题的方法：<br />1.使用dos下的debug32工具单步跟踪pmtest2.com的运行情况。但这个方法存在问题，当跟踪到mov cr0，eax语句时freedos会错误，无法继续跟踪下去。<br />2.使用bochs的magic_break，方法如下：<br />在Bochs的配置文件里加上一句magic_break: enabled=1，然后在程序里加上一句xchg bx,bx，运行到这条指令时会断到Bochs调试器里(在Bochsrc_sample.txt里)。<br />网上的留言的大侠使用该方法成功了，可惜我没成功，网上回了个贴，说了一下自己的操作流程，等待回复中。<br />今天终于把这个方法实验成功了，前面失败的原因是没有把新编译成的pmtest.com文件拷贝到pm.img文件中。下面把整个步骤完整的列一下：<br />1)修改bochsrc文件。<br />在文件末尾增加“magic_break: enabled=1”<br />2)pmtest.asm文件中增加语句xchg&#160; bx, bx，选了2个地方都没有成功<br />org&#160; 0100h<br />&#160; ;xchg&#160; bx, bx&#160; &#160; &#160; &#160; &#160;;我选的位置</p><p>&#160; jmp&#160; LABEL_BEGIN</p><br /><br /><p>3)用nasm编译新该的asm文件，并拷贝到pm.img中<br />sudo mount -o loop pm.img /mnt<br />sudo cp pmtest.com /mnt<br />sudo umount /mnt<br />4)启动bochs<br />bochs -f bochsrc<br />5)选择6<br />Please choose one: [6]<br />让bochs运行<br />&lt;bochs:1&gt; c&#160; 回车<br />6)在freedos中进入b盘，运行pmtest.com<br />7)在bochs的调试窗口中将会停在xchg bx,bx处。提示如下：<br /> (0) Magic breakpoint<br />&#160; &#160;Next at t=89456572<br />&#160; &#160;(0) [0x00032342] 3224:0102 (unk. ctxt): jmp .+643 (0x000325c8)&#160; &#160; ; e98302<br />&#160; &#160;&lt;bochs:2&gt;<br />这样我们又可以用前面的方法单步调试程序了。<br />3.使用bochs的vb命令和 Edit options实现<br />参考http://blog.csdn.net/titer1/archive/2010/04/28/5540362.aspx，上面图文并茂讲的很清楚。<br />vb命令需要seg:ofs格式来设置断点，那如何知道seg和ofs值呢？<br />在网上看到一个方法：在你想下断点的位置前增加语句jmp $，当pmtest在dos下运行起来后回到bochs调试窗口，按下ctrl+c，bochs将会停在jmp $的位置，并显示出seg:ofs。我们就可以用这个值和vb来下断点了。<br />费力的折腾了一周，才过了这关。希望作者再版时把这部分内容加上，好让大家能集中精力学习操作系统。</p>]]></description>
			<author><![CDATA[dummy@example.com (batsom)]]></author>
			<pubDate>Fri, 26 Aug 2022 06:03:12 +0000</pubDate>
			<guid>http://www.gentoo-zh.org/viewtopic.php?pid=308#p308</guid>
		</item>
	</channel>
</rss>
