标签: bios

更改bios代码/刷新BIOS

我花了很多时间开发一个操作系统并在我的低级引导加载程序上工作.但是现在我想从操作系统上抽出一些时间,而不是离开低级环境并做一些涉及安全的事情.

因此,我选择按照预启动身份验证方案构建自己的标准密码实用程序.由于我希望软件至少具有一点便携性,我希望它尽可能少地使用外部支持.我认为如果我以某种方式设法在运行的实模式操作系统内的自检和int 19引导程序之间"挂钩"到bios中,我会是最好的.

然而,找到关于如何修改bios代码的信息被证明是不可能的.我没有发现如何实现前面提到的.我只找到了描述如何刷新BIOS的页面.

有谁知道我如何读/写BIOS代码?或者有人可以提供描述这个的页面的链接?

我知道这不仅可能会破坏我的设备,但它也很可能,我知道风险并愿意接受它.

security assembly operating-system bios osdev

11
推荐指数
1
解决办法
2367
查看次数

哪里有关于低级PC启动的好信息?

我有兴趣为USB记忆棒编写一个启动加载程序,用于查找ISO目录,并为您提供启动其中一个的选项,就像它是可引导CD一样.这基本上是这样我有一个菜单驱动的程序,允许我从USB记忆棒安装几个不同的发行版之一.

我将在哪里弄清楚如何使这项工作?我是否需要安装某种BIOS黑客以允许将CD块重新映射到文件系统中的块?一旦从CD启动有足够的弹珠开始尝试直接访问设备,它将如何工作?

hardware bios bootloader

10
推荐指数
1
解决办法
215
查看次数

0xffff0和BIOS

当PC首次启动时,它开始在物理地址0xffff0处执行.该地址包含对BIOS的jmp指令.

现在我的问题是,我总是假设物理地址映射到RAM.如果RAM最初包含垃圾值,那么将jmp指令准确地放在0xffff0中是什么?对于不同的BIOS,jmp指令总是相同还是不同?0xffff0是否从RAM映射到BIOS然后(意味着它是"硬映射")?

memory boot bios

9
推荐指数
3
解决办法
6613
查看次数

如何编写连接到互联网的BIOS程序?

我知道有些程序就像在笔记本电脑上使用lojack安装在BIOS上,但我仍然有点困惑.在阅读关于lojack时,在我看来,在用户登录并尝试访问互联网之前,他们无法完全找到笔记本电脑的位置.所以我认为这是一个BIOS应用程序,以便小偷重新格式化HD无关紧要.

所以我的问题是,有没有人对互联网如何编写BIOS应用程序有任何想法.我不是在寻找完整的答案 - 只是想法或资源来开始.例如,这样的东西是用汇编写的吗?一旦这样的应用程序被编写,它如何被转移到BIOS.BIOS程序本身是否识别出有互联网连接(小偷登录操作系统时).或者在登录时,会产生其他进程吗?有没有人可以指导我的资源/网站?

bios

9
推荐指数
2
解决办法
4648
查看次数

实模式x86 ASM:基础知识如何完成?

我目前正在boot.s源代码中读取第一个Linux内核的文件(假设0.01确实是第一个公开发布).

我知道C和ASM,后者比前者少得多.即便如此,我似乎能够理解并基本上掌握源文件中的代码.

这个文件让我很困惑.我现在意识到这是因为它处于实模式,而不是保护模式.不用说,我以前从未见过以实模式编写的ASM代码.保护模式是在我出生之前运行的事实模式x86操作系统,所以这是可以预料的.

这是我想要更好地理解的例程:

/*
 * This procedure turns off the floppy drive motor, so
 * that we enter the kernel in a known state, and
 * don't have to worry about it later.
 */
kill_motor:
    push dx
    mov dx,#0x3f2
    mov al,#0
    outb
    pop dx
    ret
Run Code Online (Sandbox Code Playgroud)

向上看outb,我发现它用于将字节传递给计算机上的端口.我将基于C文档猜测这个场景将"stop motor"字节作为第一个参数传递,并将软盘驱动器端口号作为第二个参数.

这个界面是BIOS提供的吗?还是直接通过软驱?我假设BIOS对所有基本设备的基本操作都有节俭的"驱动程序".

这就是我难倒的地方:似乎数字之类的东西#0x3f2正在被掏出来.它们显然是硬件端口号或其他东西.这个文件上撒有这样的数字,没有解释他们所指的是什么.在哪里可以找到一个全面的参考资料,显示他们可以从实模式接收的所有硬件端口和控制编号?此外,似乎文件在整个启动过程中使用硬编码的内存地址在内存中移动内核.在哪里可以找到有关在实模式下可以写入哪些内存地址范围的指南?

我还阅读了Linus关于重新编程中断的评论,以避免BIOS和内部硬件中断之间的冲突.我不会撒谎,这是我的头脑.

帮助会很棒; 谷歌似乎很少涉及这个话题,万一你想知道.

assembly operating-system real-mode bios low-level

9
推荐指数
2
解决办法
2408
查看次数

我不明白如何使用中断21,AH = 0ah

我的信息来自这里.该作业要求读取不超过20个字符的程序,将这些字符转换为大写,然后将输入打印为大写字母.

我不知道如何从int21/AH = 0ah访问输入.除非我理解上面链接的内容,否则我真的不能问更准确的问题.谁能解释一下?此外,如果这有任何区别,我正在使用TASM.另外,我正在对freedos进行测试.

UPDATE1:

好的,多亏了你的帮助,我相信我理解中断是如何设置和行为的.

设置: 我必须指定一个ds:dx,我希望这个缓冲区存在

我必须将ds:dx设置为20(设置缓冲区可以容纳的最大字符数)

我必须将ds:dx + 1设置为0(我想以某种方式设置要读入的最小字符数)

实际上调用int21/AH = 0ah,它将转到ds:dx并解释预设的字节.它会在等待输入时暂停程序

int21/AH = 0ah将从我的输入填充ds:dx + 2 + n(其中n是输入的字符数,包括'\ r')

我现在的问题是,我该怎么做.我刚刚再次查看了x86汇编语言参考,但还没有找到任何有用的东西.

代码我到目前为止

           assume          cs:code,ds:code
code       segment
start:

           mov  ax,code ;moves code segment into reg AX
           mov  ds,ax   ;makes ds point to code segment

           mov  ah,0ah
           int  21h
           mov  ax,1234h  ;breakpoint

           mov  ah,9
           mov  dx,offset message
           int  21h

endNow:
           ;;;;;;;;;;ends program;;;;;;;;;;
           mov  ah,0  ;terminate program
           int  21h   ;program ends

message    db   'Hello world!!!',13,10,'$'
code       ends
           end …
Run Code Online (Sandbox Code Playgroud)

assembly dos interrupt bios tasm

9
推荐指数
1
解决办法
2万
查看次数

UEFI如何运作?

我正在研究UEFI这个术语时的引导加载程序.我可以理解一些关于UEFI的事情.但是,在什么模式下(Real,Protected,Long),UEFI的系统启动了吗?如果正常的引导加载程序无法使用UEFI,那么在处理UEFI时,引导加载程序的替代方案是什么?我是否需要任何其他编程来创建一个,而不是组装?

assembly operating-system bios bootloader uefi

9
推荐指数
3
解决办法
5092
查看次数

是否可以通过BIOS中的程序调用将存储在硬盘上的Windows库?

我正在尝试编写一个程序,这将是一个BIOS选项(POST后).我希望应用程序有一个漂亮的GUI而不是基于文本(有很多原因,本地化就是其中之一).

我的问题是我们受到应用程序大小的限制,我们可以闪存到BIOS.

是否可以使用MASM32"链接"到硬盘上的dll,以便我们可以使用Windows API来开发GUI?

或者是否有一个API可供我们创建可以链接到最终可执行文件的GUI?(最终程序可执行文件的60K大小约束)

我们将非常感谢您提供的任何帮助,在此先感谢您.

assembly bios

8
推荐指数
2
解决办法
3267
查看次数

如何将bin文件(512字节)写入软盘的第一个扇区(扇区0)?

如何将.bin文件写入软盘/虚拟软盘/软盘映像的第一个扇区?

我正在尝试启动一个简单的512字节引导加载程序.各地的大小都说"512字节",所以我应该已经很好了.

附加信息:

引导程序只显示一个字符串,我正在学习简单的汇编.一些工作是在Windows中完成的,一些是在Ubuntu 14.04(Trusty Tahr)中完成的(如果这很重要).

即使它具有引导加载程序标志,它也无法启动.

assembly floppy bios osdev bootloader

8
推荐指数
2
解决办法
5992
查看次数

引导arch时出现nouveau错误

我用窗口8.1双启动了arch linux.安装后,第一次启动时,发生此错误.

Here is the error I found.
{ [0.063411] Ignoring BGRT: Invalid status 0 (expected 1)
starting version 218
Arch_Linux: clean, 70622/18677760 files, 1643393/74703025 blocks
[    15.759913] nouveau E[  PIBUST][0000:01:00.0] HUBO: 0xffffffff (0x1a
[    15.759952] nouveau E[  PIBUST][0000:01:00.0] GPCO: 0x00000001 (0x1a
[    15.823494] nouveau E[    PBUS][0000:01:00.0] MMIO: 0x00000000 FAULT a
[    15.824050] nouveau E[     DRM]Pointer to TMDS table invalid
[    15.824072] nouveau E[     DRM]Pointer to flat panel table invalid}
Run Code Online (Sandbox Code Playgroud)

graphics boot window bios archlinux

7
推荐指数
1
解决办法
5686
查看次数