有没有办法以编程方式获取当前系统上存在的所有 BIOS 中断的列表?
Is there a way to get the list of all BIOS interrupts present on the current system programmatically?
我正在查找我的 PC 提供的 BIOS 中断列表。
要获得最常见的 BIOS 调用,有各种 public 资源,但我希望获得我的 PC 的所有(可能不是很多 public)BIOS 调用的列表。
有没有程序可以做到这一点,或者我可以用任何方式编写一个程序(最好是汇编语言或 C 语言)?
我的目标是避免 BIOS 反汇编。我也知道 BIOS 在它们的低级别 API 中相对相似,因此 API 调用列表也相似。
"Ralf Brown's interrupt list" 可能对您有所帮助。
该站点列出了 x86 系统上最常用的中断:
不仅列出了BIOS中断,还列出了MS-DOS中断和普通程序使用的中断。这包括列出 Linux 系统调用(中断 0x80)的部分。
... i.e. please don't include ...
不幸的是,您必须将 "common" BIOS 中断分开,中断仅存在于某些 BIOS 中,而 MS-DOS 中断您自己。
但是,对于许多中断,列表显示如下内容:"Only present in BIOSes made by Example Software Inc."
... my recent edit ...
如果我没理解错的话,你想要某种 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应该如何检测到显卡固件在int 10h
上增加了附加功能AX=5678h
?
我正在查找我的 PC 提供的 BIOS 中断列表。
要获得最常见的 BIOS 调用,有各种 public 资源,但我希望获得我的 PC 的所有(可能不是很多 public)BIOS 调用的列表。
有没有程序可以做到这一点,或者我可以用任何方式编写一个程序(最好是汇编语言或 C 语言)?
我的目标是避免 BIOS 反汇编。我也知道 BIOS 在它们的低级别 API 中相对相似,因此 API 调用列表也相似。
"Ralf Brown's interrupt list" 可能对您有所帮助。
该站点列出了 x86 系统上最常用的中断:
不仅列出了BIOS中断,还列出了MS-DOS中断和普通程序使用的中断。这包括列出 Linux 系统调用(中断 0x80)的部分。
... i.e. please don't include ...
不幸的是,您必须将 "common" BIOS 中断分开,中断仅存在于某些 BIOS 中,而 MS-DOS 中断您自己。
但是,对于许多中断,列表显示如下内容:"Only present in BIOSes made by Example Software Inc."
... my recent edit ...
如果我没理解错的话,你想要某种 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应该如何检测到显卡固件在int 10h
上增加了附加功能AX=5678h
?