操作系统实验debug总结

在本学期(2017-2018学年第二学期)的操作系统实验课的作业时编写操作系统,在调试过程中遇到了极大问题,下面总结一下debug工具和方法。
我使用的是bochs+nasm+Mingw(主要是其中的gcc、objdump、objcopy、ld)。

对于bochs调试,我就不说了,不会的同学进入bochsdbg.exe后输入help一下,对某个指令help一下(help [name])可以看该指令的详细信息,推荐熟悉使用print-stack指令查看栈空间,xxp查看内存,u查看反汇编指令,b和c端点调试等等,最主要的是xxp和print-stack查看栈和内存空间。

重点来了,是不是觉得看着bochs的反汇编不知道运行到哪里去了(特别是C语言那些部分),下面提出一个解决方法:
在gcc编译的时候加入-g选项生成带调试信息的elf文件(注意,不要二进制文件),然后使用objdump来将该elf文件反汇编,选项是-Sl,当然还要加上其他指明机器框架之类的选项。
下面是效果:

_main():
:21
short *FAT;
struct Process processTable[Len];
int curId;

int _main() {
      11:   66 56                   push   esi
      13:   66 53                   push   ebx
      15:   66 83 ec 18             sub    esp,0x18
:22
    curId = 0;
      19:   66 c7 06 c0 50 00 00    mov    DWORD PTR ds:0x50c0,0x0
      20:   00 00 
:23
    initialScreen(1);
      22:   67 66 c7 04 24 01 00    mov    DWORD PTR [esp],0x1
      29:   00 00 
      2b:   66 e8 ea 12 00 00       call   131b <_initialScreen>
:24
    initialFile();
      31:   66 e8 f8 1d 00 00       call   1e2f <_initialFile>
:25
    initialProcessTable();
      37:   66 e8 b0 22 00 00       call   22ed <_initialProcessTable>
      3d:   e9 e0 02                jmp    320 <__file_alignment__+0x120>

一条C语言程序对应一段汇编代码。

你可能感兴趣的:(汇编语言)