如何从这个 DOS exe BIOS 更新程序中提取 ROM 文件?

如何从这个 DOS exe BIOS 更新程序中提取 ROM 文件?

我正在尝试更新我的 DELL VOSTRO 260 BIOS。我很难找到任何方法,请参阅更多信息:

我决定直接提取 flashrom。我并没有尝试运行刷新步骤,只是从 exe 中提取 ROM。因此,如果我下载 exe 并尝试使用 dosemu 运行它,我会得到以下结果:

$ wget http://downloads.dell.com/FOLDER01639275M/1/MS-A10.exe
$ dosemu -dumb MS-A10.exe > log
$ cat log
SfxDos v2.11. [2012/06/25]
Extracting Files: [6174382 / 6174382] 100%  
Missing SMBIOS Table

这是什么意思?有人设法从这些 exe 中提取实际固件吗?我找不到任何可以工作的东西:

$ unrar l MS-A10.exe 

UNRAR 5.00 beta 8 freeware      Copyright (c) 1993-2013 Alexander Roshal

MS-A10.exe is not RAR archive

或者

$ unzip -l MS-A10.exe 
Archive:  MS-A10.exe
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of MS-A10.exe or
        MS-A10.exe.zip, and cannot find MS-A10.exe.ZIP, period.

以供参考:

$ file MS-A10.exe 
MS-A10.exe: MS-DOS executable

如何从这个自解压 DOS exe 中提取 ROM 文件?

答案1

实际上这很简单,只需在 wine 下运行它:

$ wine MS-A10.exe

输出将在 .wine 目录中找到:

$ find $HOME/.wine | grep MS-A10
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AFUWIN.EXE
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AMIFLDRV.VXD
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AMIFLDRV64.SYS
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AMIFLDRV32.SYS
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/RosaBUU.exe
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/Pmxdll.dll
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/Idrvdll.dll
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/FWUpdLcl.exe
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/settings.ini
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/error.log
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/1176upd.BIN
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/AFUWINx64.EXE
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/RosaBUU.log
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/MS-A10.BIN
/home/mathieu/.wine/drive_c/users/mathieu/Temp/MS-A10/FWUpdLcl64.exe

和:

$ file MS-A10.BIN
MS-A10.BIN: Intel serial flash for PCH ROM

我想这对任何试图进行此 BIOS 更新的人来说都没什么意义,你应该知道使用 Win7/32 位修复磁盘不是一个选择(我按照这里)实际上,运行时所需的 DLL 要求找到 oledlg.dll:

$ objdump -x RosaBUU.exe  | grep DLL
 vma:            Hint    Time      Forward  DLL       First
    DLL Name: dbghelp.dll
    DLL Name: KERNEL32.dll
    DLL Name: USER32.dll
    DLL Name: GDI32.dll
    DLL Name: COMDLG32.dll
    DLL Name: WINSPOOL.DRV
    DLL Name: ADVAPI32.dll
    DLL Name: SHELL32.dll
    DLL Name: COMCTL32.dll
    DLL Name: SHLWAPI.dll
    DLL Name: oledlg.dll
    DLL Name: ole32.dll
    DLL Name: OLEAUT32.dll

显然,Win7/32bits 修复盘中不存在此 DLL。

答案2

有一个命令行开关可以提取 ROM(可能需要 Windows):

MS-A10.exe /writeromfile

答案3

当您使用额外参数“-?”运行 EXE 文件时,输出是什么?
您可能会获得可用命令行选项的列表。

如果它是使用旧版本的 DOS RAR 制作的,那么通常“-x”只会进行提取,而不会尝试随后立即运行 BIOS 刷新程序。

无论如何:您永远无法在 Linux 环境中运行基于 DOS 的闪存实用程序。这实际上导致了您看到的 SMBios 消息。这意味着它无法找到 BIOS 芯片。像 dosemu 这样的模拟器不会有帮助。它无法为 DOS 命令提供对硬件的必要低级访问权限。

最好的选择似乎是创建一个装有 FreeDOS 的 USB 启动盘或可启动 CD,然后从中运行 EXE。这样根本不需要解压 EXE。(从只读媒体运行时,您必须设置 FreeDOS 以创建 RAM 磁盘并从中运行 EXE。它需要一个可写的工作目录来提取 BIOS 文件。)

相关内容