我正在尝试编写以下程序,以便在虚拟机中使用FreeDOS转储interrupt vector table。我知道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);
}
答案 0 :(得分:1)
for,address和printf之类的东西不是汇编的一部分。您必须将其重写为实际的汇编代码,或者将要使用的宏和汇编器复制到freedos环境中。
如果你想使用freedos中包含的debug,可以使用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表示要写入磁盘的程序长度)