跳到主要內容

EFI Shell mode中擷取圖片

微軟提供了一個工具可以讓我們輕鬆的在EFI SHELL環境下擷取圖片的工具"PrintScreenLogger",省去在EFI SHELL還要透過照相機拍照,方便有好用。

使用步驟:
1. 增加文字檔到開機隨身碟,並重新命名為"PrintScreenEnable.txt"
2. "PrintScreenLogger.efi"放入開機隨身碟
3. 將開機隨身碟插入USB Port,並且開機進入隨身碟
4. 命令列輸入"Load PrintScreenLogger.efi",將驅動載入系統中
5. 按壓鍵盤 CTRL+ SCREEN PRINT,擷取圖片
6. 隨身碟中會產生xxxxxx00001.bmp

下載:



以上文章內容參考https://www.lab-z.com/msscp/,有興趣可前往閱讀完整內容。

留言

這個網誌中的熱門文章

如何讀寫PCI/PCIE暫存器資料

根據PCI Local Bus Specification中有提及,讀取PCI暫存器資料有兩總方式, 一是透過IO(CF8/CFC),另一種舊式透過MMIO 。 IO Mapped (CF8/CFC) 首先我們必須透過PCI Function Address(PFA)算出 Memory Mapped 要透過MMIO去讀取PCI暫存器,就必須先取得PCIEBAR,PCIEBAR可以參考EDS中BUS 0/ DEV 0/ FUN 0 ,找出PCIEBAR Base Address。 以PCI Device例子來看: 假設有個PCI的Device它的PFA(PCI Function Address)為(0,6,0)[bus/dev/function] 我們想要對PCI Register 43h bit1寫入1 範例程式碼如下: mov eax, 80003040h mov dx, 0cf8h out dx, eax mov dx, 0cffh in al, dx or al, 00000010b out dx, al IO Port 0x0cf8/0x0cfc為PCI Config Address/Data Port 這種方式就是I/O Mapped I/O 如果是PCIe Device的話,原則上原本的0x0cf8/0x0cfc還是可以用,但它只能存取Offset 00h~FFh, 要存取100h以上的空間時,就必需要用MMIO了。 範例程式如下: 假設我們要讀取Device(4,0,0)的register 0,讀2bytes mov ax,[50400000h] 假設0x50000000是PCIe的Memory Base Address PCIe PFA[27:20]: Bus information PCIe PFA[19:15]: Device information PCIe PFA[14:12]: Function information PCIe PFA[11: 8]: Extended Register PCIe PFA[7:2]: DW number PCIe PFA[1:0]: Byte enable

如何讀寫SMBus

在介紹如何讀寫SMBus之前,首先我們必須先知道什麼是SMBUS? SMBus (System Managemnet Bus,系統管理匯流排) 簡單來說是有兩條訊號線 (SMBCLK/SMBDATA) 所組成一個匯流排,讓系統上一些低速裝置進行互相溝通的管道,如EC或感測裝置等。簡單舉個例子,當系統上想得知某個掛在SMBus匯流排下的溫度感測器他的溫度變化時,首先我們必須得知感測裝置的位置(Slave Address),由Host透過SMBus通道對溫度感測器進行回傳溫度的命令,當感測器得到命令後,再將溫度回傳給Host。 RW讀取SMBUS 1.取得SMBus Base Address,根據Spec可在Offset 20h - 23h取得,此範例IO Base = 0xF040。 2.選擇IO Space方式,輸入IO Base: 0xF040,根據Spec我們主要讀寫區域為Offset 00h - 07h。 3.Byte Read - SMB_BASE + 0x00h (HST_STS)寫入0xFE,清除暫存器狀態,以確保SMBus不為忙碌狀態 - SMB_BASE + 0x04h (XMIT_SLVA)寫入0xA1 (裝置的Slave Address) 注意!!此處以Memory裝置為範例,所以Slave Address = 0xA1,而BIT0 = 1為讀取,反之則為寫入。 - SMB_BASE + 0x03h (HST_CMD)寫入0x00 ,此處主要寫入要讀取的Offset,先以0x00為範例 - SMB_BASE + 0x02h (HST_CNT)寫入0x48,開始執行讀取。Bit6代表開始執行,Bit2-4為選擇讀取的方式 - SMB_BASE + 0x05h (HST_D0),讀取Byte資料顯示於此 4.Word Read -重複Byte Read步驟1-3 - SMB_BASE + 0x02h (HST_CNT)寫入0x4C,開始執行讀取。Bit6代表開始執行,Bit2-4為選擇讀取的方式 - SMB_BASE + 0x05h (HST_D0) / SMB_BASE + 0x06h (HST_D1),讀取Word資料顯示於此 5.Block Read -重複Byte Read步驟1-3 - SMB_BASE + 0x02h (HST_CNT)寫

架設EDK2+VS2019編譯環境

1.下載軟體 - EDK2 edk2-stable-202011 or Newest - VS2019 C++ - python 3.8 - NASM http://www.nasm.us/ - ASL https://acpica.org/downloads/binary-tools - BaseTools/Source/C/BrotliCompress/brotli - MdeModulePkg/Library/BrotliCustomDecompressLib/brotli - CryptoPkg/Library/OpensslLib/openssl 2.建立資料夾(C:\Workspace) - 將edk2-stable-202011.zip內容解壓到C:\Workspace\ - 解壓brotli至BaseTools/Source/C/BrotliCompress/brotli - 解壓brotli至MdeModulePkg/Library/BrotliCustomDecompressLib/brotli - 解壓openssl至CryptoPkg/Library/OpensslLib/openssl 3.安裝VS2019 4.安裝Python3.8 5. 解壓NASM及IASL到 C:\Workspace\NASM\及 C:\Workspace\IASL\ 注意:NASM及IASL資料夾請自行建立 6.開始 > 程式集 > VS2019 >執行Developer Command Prompt for VS 2019 >  進入Workspace資料夾 8.環境設定 - set NASM_PREFIX=C:\Workspace\NASM\ - set IASL_PREFIX=C:\Workspace\IASL\ - set WORKSPACE=C:\Workspace\ - set PACKAGES_PATH=C:\Workspace\ 9.執行edksetup.bat 10.進入C:\Workspace\Confg\,修改target.txt - ACTIVE_PLATFORM = EmulatorPkg/EmulatorPkg.dsc - TARGET = RELEASE - TARGET_ARCH = X64 - TOOL_C