我打算在startup.nsh中编写一个脚本来处理32位和64位的不同任务。但我不知道如何检索这些信息。
请帮助我!
答案 0 :(得分:0)
如果你打算在.nsh中写东西,一个快速验证方法就是在文件系统上放置2个虚拟.efi程序,一个编译为IA32,另一个编译为X64。
然后尝试从.nsh脚本运行这两个程序。正确运行的人会告诉您系统的架构。
另一种方法是放入你的pendrive文件,如BOOTIA32和BOOTX64。被执行的人填充一些变量或在文件系统中写入一些指示当前体系结构的文件,然后给shell。
我会尝试寻找更好的方法(可能是一些没有解决方法的shell工具);如果我发现任何内容,我会在答案中添加。
更新:您还可以使用UEFI Shell中的 smbiosview 实用程序。您可以通过以下方式搜索特定的结构类型:
smbiosview -t <structure_type>
您可以尝试检查以下结构类型:
答案 1 :(得分:0)
创建一个简单的EFI字节码应用程序,该应用程序:
此类应用程序的汇编代码可能类似于:
movnw r1, @r0(+1, +16)
movnw r2, @r0(+0, +16)
xor32 r3, r3
pushn r3
pushn r3
pushn r3
movnw r1, @r1(EFI_SYSTEM_TABLE.BootServices)
callex @r1(EFI_BOOT_SERVICES.AllocatePool)
movn r7, r7
movib @r0, 0x32
cmpi32eq r7, 0x80000002
jmpcs @f
movib @r0, 0x64
@@:
pushn r2
callex @r1(EFI_BOOT_SERVICES.Exit)
这里是Base64编码的应用程序二进制文件本身
TVoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAFBFAAC8DgIAAAAAAAAAAAAAAAAAcAAiAAsCAQBAAAAAAAAAAAAAAAAgAQAAIAEAAAAAAAEAAAAAIAAAACAAAAABAAAAAQAAAAEAAAAAAAAAYAEAACABAAAAAAAACgAAAAAAEAAAAAAAABAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAudGV4dAAAADQAAAAgAQAAQAAAACABAAAAAAAAAAAAAAAAAAAgAABgLmRhdGEAAAAAAAAAYAEAAAAAAABgAQAAAAAAAAAAAAAAAAAAIAAAYAAAAAAAAAAAcoFBEHKCEAAWMzUDNQM1A3KRiSGDKYUBABAyd3cIMgCtBwIAAIDCAncIZAA1AoMpGBgAIAAAAAAAAAAAAAAAAA ==
以及用法示例屏幕截图: