问题:无法显示多次输出的字符串的问题
原因调查1、跟踪定位问题使用baochs跟踪时,第二次调用dispstr时发现输入的字符串地址是问题。 所以即使多次打印也不会显示。
下图:
上面三个是与三次输出相对应的字符串地址;
发送到下一个disostr的参数是地址行错误的。
只要修改下面发送的地址,就能正常显示。
可以判断其他部分没有问题,
是dispstr有问题,还是液晶屏工具有问题,
在我这里工具版本和原书的差距很大,所以工具问题的可能性也很高。
这是disp_str的代码,似乎没有任何问题。
关键的原作者不能改变二进制文件让程序过去吧。
2、利用反汇编工具查找问题
想不到。 本方法查看kernel反汇编,看看cstart发送给disp_str的值是否正确。
使用反汇编工具显示调用点代码。
具体如下图所示。
我发现没有问题。 eax中设定的地址差分值与上述一致。
但是,这里需要从细节上加以注意。 这里是ebx
突然我明白了,因为我们的dispstr里面使用了bl,同时并没有备份恢复ebx,所以才展示异常。
果然只要修改编译,就能正常展示
总结是编译器的变化,可能是现在不能对函数随意修改ebx了;
虽然找了初期的ubuntu,但是gcc等没能下来,也没有具体验证。
对于64位系统,我认为还有其他问题。
总之调试要人命啊。 找错很困难。