1

我正在尝试编写以下程序来在虚拟机中使用 FreeDOS转储中断向量表。我知道这DEBUG将允许我编写一个汇编程序,但是如何创建以下 IVTDUMP.COM 文件,保存并运行它?

注意:如果可能的话,我想尝试直接从 FreeDOS 完成所有操作。我尝试使用该EDIT命令,但它出错了,我很确定我错过了一些东西。

for 
( 
   address=IDT_255_ADDR;
   address>=IDT_001_ADDR;
   address=address-IDT_VECTOR_SZ,vector--
)
{
   printf("%03d   %08p   ",vector,address);

   __asm
  {
     PUSH ES
     MOV AX,0
     MOV ES,AX
     MOV BX,address
     MOV AX,ES:[BX]
     MOV ipAddr,AX
     INC BX
     INC BX
     MOV AX,ES:[BX]
     MOV csAddr,AX
     POP ES
   };
   printf("[CS:IP]=[%04X,%04X]\n",csAddr,ipAddr);
}
4

1 回答 1

1

for、address 和 printf 之类的东西不是程序集的一部分。您必须将其重写为实际的汇编代码或将要使用的宏和汇编程序复制到您的 freedos 环境中。

如果你想使用 freedos 中包含的调试,你可以使用 a 命令开始编写汇编指令, n 命令给出名称, w 将代码写入文件。

C:\debug
-a
06BC:0100 int 20
06BC:0102
-n ivtdump.com
-rcx 2
-w
Writing 0002 bytes.
-q

C:\

本示例程序仅通过int 20退出程序。(rcx后面的2表示程序写入磁盘的长度)

于 2013-07-12T09:58:05.677 回答