Visual Studio X86 程序集调试器(C# 开源托管操作系统)






4.71/5 (10投票s)
一些用户写信给我,要求提供有关新的 Cosmos X86 汇编级别调试器的信息。 由于大家的浓厚兴趣,我撰写了这篇简短的预览文章。
引言
一些用户写信给我,要求提供有关新的 Cosmos X86 汇编级别调试器的信息。 由于大家的浓厚兴趣,我撰写了这篇简短的预览文章。
Cosmos 已经有一个集成的 Visual Studio 调试器,用于调试 C# 和 VB.NET 代码。 但是,要调试 X86 汇编,用户需要求助于 GDB。 Cosmos 还包括一个部分 GDB 前端,但 IL 和 C# 代码之间的链接丢失了,需要大量的脑力解析。
最终,我们希望扩展我们的新汇编调试器,以便只有在非常深入的调试(例如调试存根)时才需要 GDB。 X86 调试器允许您在 C# 中设置断点,然后查看 IL 以及 X86 ASM,以及寄存器。
Cosmos 是什么?
Cosmos 是一个操作系统开发工具包(更多信息),它使用 Visual Studio 作为其开发环境。 尽管名称中有 C#,但可以使用任何基于 .NET 的语言,包括 VB.NET、Fortran、Delphi Prism、IronPython、F# 等。 Cosmos 本身和内核例程主要用 C# 编写,因此得名 Cosmos。 除此之外,NOSMOS(.NET 开源托管操作系统)听起来很愚蠢。
Cosmos 不是传统意义上的操作系统,而是一个“操作系统工具包”,或者像我喜欢说的那样,“操作系统乐高”。 Cosmos 让您可以创建操作系统,就像 Visual Studio 和 C# 通常让您创建应用程序一样。 大多数用户可以在几分钟内编写和启动他们自己的操作系统,所有这些都使用 Visual Studio。 Cosmos 支持 Visual Studio 中的集成项目类型以及集成调试器、断点、监视等等。 您可以像调试普通的 C# 或 VB.NET 应用程序一样调试您的操作系统。
使用汇编调试器
首先打开新的 Cosmos 工具窗口。
目前,只有汇编和寄存器窗口是功能性的。 堆栈/帧窗口将在未来几天内投入使用。 我们还将添加额外的窗口,允许直接内存检查,并最终实现汇编级别的单步执行。
现在在 C# 代码中设置一个断点并运行您的操作系统。 如果您使用的是默认设置,VMWare 将显示您的操作系统,Visual Studio 将在断点处停止。
您会注意到本地监视窗口是可用的。 这是 Cosmos Visual Studio 调试器的一部分。 但是,新的是右侧显示的两个汇编调试器窗口。 汇编窗口显示带有断点的行的 IL 和 X86 汇编代码。 如果设置了更多断点,或者使用了单步执行,汇编调试器窗口将每次更新。 请注意,这里有一个小错误,它显示在此屏幕截图中。 它只在汇编窗口中显示一个 IL 操作码。 它应该读取
System_Void__BreakpointsKernel_BreakpointsOS_Run____DOT__00000001:
call DebugStub_TracerEntry
; [Cosmos.IL2CPU.X86.IL.Ldc_I4]
push dword 0x0
; Stack contains 1 items: (4)
System_Void__BreakpointsKernel_BreakpointsOS_Run____DOT__00000002:
; [Cosmos.IL2CPU.X86.IL.Stloc]
; EBPOffset = 4
pop dword EAX
mov dword [EBP + -4], EAX
; Stack contains 0 items: ()
寄存器窗口显示汇编窗口开始处的 X86 寄存器。 如果值自上次显示以来发生了变化,则以红色显示。 这对于监控更改非常有用。
为什么需要汇编级别调试器?
如果 Cosmos 是用 C# 编写的,为什么我们需要如此低级的调试器? 我们希望大多数用户只需要使用 C# 调试器。 但是,对于正在使用编译器 (IL2CPU) 或调试直接硬件交互的用户来说,汇编级别调试器是一个巨大的帮助。