有没有办法以编程方式获取当前系统上存在的所有BIOS中断的列表?

时间:2019-04-07 03:27:51

标签: assembly x86 bios real-mode

我正在寻找PC提供的BIOS中断列表。

要获得最常见的BIOS调用,可以使用各种公共资源,但是我希望获得PC的所有BIOS调用列表(可能不是非常公开)。

是否有程序可以执行此操作,或者可以用什么方式编写(最好是用汇编或C语言编写)?

如果没有,那没什么大不了的。我可以安排一些通用的清单。

我的目标是避免低级BIOS调试/拆卸。我也知道BIOS的底层API相对相似,因此API调用的列表也相似。

1 个答案:

答案 0 :(得分:7)

Ralf Brown's interrupt list”可能对您有所帮助。

该站点列出了x86系统上最常用的大多数中断:

不仅列出了BIOS中断,而且还列出了MS-DOS中断和普通程序使用的中断。这包括列出Linux系统调用(中断0x80)的部分。

  

...即,请不要包括...

不幸的是,您将不得不分开“普通” BIOS中断,仅某些BIOS中存在的中断和MS-DOS自己。

但是,对于许多中断,列表显示类似以下内容:“仅存在于Example Software Inc.制造的BIOS中。”

  

...我最近的编辑...

如果我对您的理解正确,那么您想要某种API来告诉您特定系统上存在哪些中断。

不幸的是,这样的API不存在:

BIOS不一定是单个软件。相反,某些硬件组件(例如图形卡)可能具有自己的固件。

此类组件的固件通常没有自己的中断,但可以通过更改中断向量来向BIOS中断添加功能。

图形卡的固件可以通过更改中断向量来向AX=5678h添加功能int 10h,使其指向以下代码段:

new_int_10_vector:
    cmp ax, 5678h
    je new_function

    ; (In reality, the next line is not as simple as shown here)
    jmp original_int_10_vector

new_function:
    ; Perform the "new" function "AX=5678h" of "int 10h"
    ; ...
    iret

如果现代BIOS供应商希望引入列出所有受支持功能(您正在寻找的功能)的功能,那么他们会遇到问题:

BIOS应该如何检测图形卡的固件向AX=5678h添加了附加功能int 10h