UEFI 介紹!

Intel即將在明年初,也就是最快下個月發表全新的Sandy Bridge處理器平台,在我們先前的整理報導提到,各大主機板廠商都有意願在新的P67主機板上,以新一代的EFI韌體來取代傳統的BIOS,如果你還不知道EFI是什麼,跟我們拿出2009年刊登在電腦王雜誌的專題來複習吧。


回想一下,你上次是什麼時候進入主機板BIOS選單的?對一般使用者而言,主機板BIOS的主要功能,就是讓你可以壓榨出更多硬體效能,或是去打開、關閉特定的功能才需要查看。不然就是為了讓新買的CPU可以被主機板辨識,或是修正一些bug的時候才會去更新它。

可曾想過,這個平淡無奇,又不是很好瞭解的「基本輸入/輸出系統」也慢慢開始有了變化。首先,筆者在486時代的後期看過BIOS大廠AMI曾推出 師法Windows 3.1介面而且可以用滑鼠操控的版本。後來Phoenix也力圖推行當時號稱所謂「真正圖形介面BIOS」的CSS。而Intel也在推出Itanium 64位元處理器的時候,推出了開發代號為Tiano的EFI功能核心框架。不過,畢竟是人多好辦事。在後來許多業界重量級大廠紛紛表態支持EFI,並組成 UEFI論壇之後,UEFI BIOS將是未來BIOS主流的趨勢在此確定。

在筆者介紹UEFI BIOS到底是啥,能做什麼之前,我們先來回憶一下電腦是怎樣開機的。畢竟,不管UEFI BIOS有多麼強大的功能,基本上還是要先讓一台電腦開機。

▲ 你看過嗎?這是AMI多年以前推出的WinBIOS設定畫面。(圖片為主機板手冊翻拍)


傳統BIOS開機流程

從你按下主機機殼上的電源鍵,到進入作業系統的期間,儲存於主機板上那顆EEPROM(電氣可抹除暨可程式化唯讀記憶體)裡的BIOS便會開始執行以下的工作:

 

1. 初始化:

當電腦打開,CPU會自行重置為初始狀態,準備運作。BIOS boot block(基本輸出輸入系統開機區塊)初始化階段啟動,因為此時系統記憶體中是空的,沒有內容可以執行,所以廠商讓CPU去尋找系統BIOS ROM中的reset vector(重置向量):用一個固定的位置來啟動所謂的BIOS boot program開機程式。
一般來說程式會在記憶體的FFFF0h位址,也就是在UMA(上層記憶區域)靠結尾的地方。為避免ROM大小改變造成相容性的問題,所以一般會選擇 放這裡。它的內容只有一個jump指令,進一步跳到真正的BIOS啟動程序。當然了,各家IBV (independent BIOS vender;獨立BIOS供應商)可以把程式放在不同的位置,只要透過jump來指定就可以了。
在這段期間,系統的CPU、晶片組、Super I/O和USB只有部分初始化,僅獲取足夠資料來應付萬一BIOS開機失敗,可以利用軟碟(由Super I/O控管)甚至是光碟(由晶片組的IDE/SATA)等儲存媒體來救援BIOS的boot block。

 

2. POST(Power On Self Test;開機自我檢測):

然後BIOS開始施行Power-On Self Test(POST;開機自我檢測),在過程中檢查電腦各項組件及其設定,像是:中央處理器、主記憶體、鍵盤、滑鼠等等狀態。接著便尋找被內建在BIOS內部的顯示卡程序並執行。
它通常被放在記憶體C0000h的位置,作用是顯示卡的初始化,而大部分的顯示卡都會在顯示器上顯示其相關訊息。這就是為何各位在開機的時候,首先會在顯示器的畫面左上角出現有關顯示卡訊息的原因。
再下來就是讓BIOS尋找其他裝置的ROM(唯讀記憶體),看看這些設備中哪些還有個別的BIOS。如果這時有找到任何其它裝置的BIOS,它們也會被執行。
下一步BIOS會顯示啟動畫面,並開始更深入的檢測,包含我們平常可以在螢幕上看到的記憶體容量檢測。如果這時候遇到任何錯誤,就會在畫面上顯示錯誤訊息。

 

3. 記錄電腦系統的設定值:

到這裡還沒有結束,再來BIOS會根據自己的「系統資源表」,來對系統進行進一步的確認,看看你的電腦究竟安裝了那些系統資源或設備。有些電腦會逐 步顯示這些被偵測到的設備。例如BIOS支援隨插即用,那它將會偵測和配置隨插即用裝置,並顯示由BIOS偵測到的隨插即用設備。
在這些檢測結束後,BIOS會打出一個偵測總結表於畫面上。而這個總結表在部分IBV的設定中是可以讓使用者開啟或關閉的。當然也有些IBV為加速開機把這一步直接隱藏省略。
Tips:BIOS boot block
在快閃唯讀記憶體內,通常會分成兩個區塊,一個區塊存放一般的BIOS程式碼,即所謂的code block(程式碼區塊);另一個區塊則是存放用來開機(或急救)的程式碼,就是所謂的boot block(開機區塊)。當電源打開時,主機板會先從boot block執行,它會立即檢查code block 的程式碼是否正確,如果正確,就會轉到code block 繼續執行下去。而所謂的BIOS recovery(BIOS回復)就是利用boot block回寫動作來進行BIOS更新失敗時的救援。

 

4. 提供常駐程式:

提供作業系統或應用程式呼叫的中斷向量,如INT 10h(VGA圖形及文字輸出中斷)等。

 

5. 載入作業系統:

到這裡是系統檢測的部分,接下來BIOS便開始尋找開機裝置,使用者可以透過在BIOS的設定來決定搜尋順序,目前常見的開機設備至少包含FDD、HDD以及光碟機和USB開機裝置等多項。
找到開機裝置後,BIOS將會搜尋開機訊息以進行作業系統的開機過程。如果是找到了一個灌好OS的硬碟,它將會尋找位在硬碟第0面,第0軌,第1磁 區裡的Master Boot Record(主要開機磁區)。如果它找到的是FDD,也會讀取軟碟的第1磁區。再把讀取到的資料放在記憶體7C00h的位置,跳到那裡並且執行它。自此 才開始進入OS啟動階段。


 

UEFI BIOS系統的開機流程

同樣是進行電腦系統的開機,由於UEFI BIOS是遵循UEFI論壇的規範定義下開發的,所以UEFI的開機流程會像下圖一般:

 

1. SEC階段:

SEC(安全性)階段其主要的特色為「cache as RAM」,即處理器的快取當成記憶體。由於C語言需要使用堆疊,在這個階段的系統記憶體尚未被初始化,在沒有記憶體可用的情況下,便把處理器的快取當成記 憶體來使用,在主記憶體被初始化之前來進行預先驗證CPU/晶片組及主機板。
因為這時侯沒有快取,會導致處理器的效能變得較差,所以在記憶體初始化完畢之前,SEC和PEI階段的程式碼越簡短,越能減少這個副作用。

 

2. PEI階段:

和傳統BIOS的初始化階段類似,PEI(EFI前初始化)階段是用以喚醒CPU及記憶體初始化。這時候只起始了一小部分的記憶體。同時,晶片組和 主機板也開始初始化。接下來的服務程式會確定CPU晶片組被正確的初始化,在此時,EFI驅動程式派送器將載入EFI驅動程式記憶體,進入了起始所有記憶 體的DXE階段(驅動程式執行環境)。

 

3. DXE階段:

DXE的主要功能在於溝通EFI驅動程式及硬體。也就是說此階段所有的記憶體、CPU(在此是指實體兩個或以上的非核心數目,也就是雙CPU插槽處理器甚至是四CPU插槽處理器)、PCI、USB、SATA和Shell都會被初始化。

 

4. BDS階段:

在BDS(開機設備選擇)這個階段,使用者就可以自開機管理者程式頁面,選擇要從哪個偵測到的開機設備來啟動。

 

5. TSL階段:

然後進入TSL(短暫系統載入)階段,由作業系統接手開機。除此之外,也可以在BDS階段選擇UEFI Shell,讓系統進入簡單的命令列,進行基本診斷和維護。

 

傳統BIOS哪裡不好?

在繼續探討何謂UEFI BIOS之前,先來看看傳統BIOS有哪些問題,讓Intel決心帶頭推出UEFI BIOS。

 

1. 過時的16位元模式

在x86系列CPU進入32位元的時代,為了相容性考量,當時最新的80386 CPU保留了16位元的執行方式,即真實模式(real mode)。在後來多次的CPU改朝換代中都保留了這種執行方式,甚至在含有EM64T的Xeon系列CPU中,供電到CPU啟動時仍然會切換到16位元 的真實模式下執行。
也就是說,雖然各大BIOS廠商為了配合潮流演進,將許多新功能新元素添加到產品中,但BIOS在本質上沒有任何改變。迫使Intel在開發更新的CPU時,都必須加進會使效能大大降低的相容模式。

 

2. 只有1MB定址空間

各位讀者如果有注意傳統BIOS開機,在POST完畢後螢幕上打出的系統摘要表,會發現記憶體欄位標示著「Base Memory=640KB」。加上前一篇提到的384KB UMA(這裡的記憶體不會列入Base Memory),就是所謂1MB可定址記憶體空間。
會造成這項限制,主要還是真實模式的副作用。16位元的CPU,其定址能力為20條定址線所能處理的2^20位元組(Bytes),也就是1024千位元組(KB)。換句話說,在進入OS之前的開機階段,即使安裝了高達4GB的記憶體,絕大部分都無法使用。

 

3. 組合語言難維護

假設某天你買了一張高階工作站主機板,再裝上一張SCSI或SAS的磁碟陣列卡,竟然發現安裝後你的主機板開機開不下去,然後顯示「Not enough space to copy PCI option ROM」或「Option ROM memory space exhausted」警告字串。然後本來你那雀躍快樂的心情消失了,取而代之的是「歸LP火」熊熊燃燒著。

當你打電話給陣列卡商,電話那頭的死公務員聲音說著:「你要不要問問主機板廠有沒有新的BIOS?」。 好不容易找上主機板廠商客服問:「你們有沒有辦法解決?」然後,你和主機板BIOS工程師之間的攻防就此展開。

對板卡廠的BIOS工程師而言,除非剛好有下單下很大的客戶遇到類似相關問題,否則很有可能就是不了了之。你只好趁購買七天內退掉那張陣列卡,不然就是再找一張可以正常搭配的主機板。

由於傳統BIOS是用組合語言編寫的,而軟體界早就已經是C/C++高階語言甚至是.NET滿天飛,為了相對難找的人才(組合語言高手相對少,要BIOS真正寫得好的更是少數)來減緩新產品上市的速度,不管是消費者或廠商都無法接受。
此時UEFI BIOS標準化和模組化的特徵,便可加速產品推出和減少debug的時間。另外C語言寫的UEFI BIOS體積也會變大,連帶使儲存BIOS的EEPROM需要擴增。
別忘了,這也是Intel的勢力範圍,如果EFI BIOS推廣成功,板卡廠就得多採購一顆晶片。
▲ 由於傳統BIOS的先天侷限,有時候磁碟陣列卡就是裝不上去。

 

4. 十年不變的程式碼

上述三大問題是以開發廠商的角度來觀察。其他隱而不現的部分,則包含了功能的侷限性和對使用者不夠友善的操作介面。對照現今的視窗介面作業系統,傳統BIOS以文字介面為主且充滿著火星文,加上除了單純的開機,作為仲介硬體初始化和作業系統的功能外實在陽春的可憐。

在開發Itanium CPU之際,業界大魔王Intel實在不想再受制於這些顧慮。試想,既然這是一個新生的CPU架構,那系統韌體和作業系統之間的介面就順便一起重新定義。

並且這一次,Intel為了讓以後各種新的規格和技術可以快速導入,嚴格定義這個傳統BIOS接班人必須具有擴展彈性,而且採取標準化的韌體介面規範,以避免發生傳統BIOS的IBV程式碼更新太被動的問題。

筆者不是開玩笑,業界之前盛傳一句話,如果Award BIOS當時(Intel Pentium處理器時代)沒有華碩,那肯定沒有後來功能齊全的BIOS程式編碼。傳統BIOS靜態連結,缺乏遠見且疊床架屋,而幾乎全基於經驗和約定的 見招拆招。所以才有2000年開發出來所謂的EFI(Extensible Firmware Interface;可擴展韌體介面)技術作為工業標準規格,定義了一個驅動介面,用以溝通硬體/韌體和作業系統。

UEFI的版本發展

最初制定的EFI版本2000年12月的1.02版。在2002年的12月又釋出了加入EFI驅動程式模型的1.10版。於2005年,Intel 將此規格提供給負責UEFI開發和推廣的UEFI論壇。為了反映這點,EFI也被更名為UEFI。在大部分的文件資料中,EFI和UEFI講的是一樣的東 西。
UEFI論壇在2007年1月釋出2.1版的規範。目前最新公開的版本就是2009年5月發佈的2.3版。概括而論,凡依照UEFI論壇規範,使用C語言寫作的BIOS即為UEFI BIOS。
UEFI論壇成員類別
IBV(獨立BIOS 廠商)AMI、Insyde、Phoenix
IHV(獨立硬體廠商)AMD、Apple、Dell、HP、
IBM、Intel、聯想
ISV(獨立軟體廠商)微軟

UEFI BIOS哪裡好?

UEFI是藉由UEFI論壇制定的嚴謹規範來達成標準化,並用模組化之C語言方式的參數堆疊傳遞,藉由動態連結形式所建構出來的系統,相較於使用組 合語言的傳統BIOS更易於實作,在容錯和錯誤更正的表現上更加優良,更好開發。UEFI是以32或64位元CPU保護模式執行(也稱為Flat Mode),突破傳統16位元代碼的定址能力,可達到CPU的最大定址空間。

 

1. 定址空間更彈性

UEFI BIOS利用載入EFI driver的形式,來進行硬體的辨識/控制及系統資源掌控。
傳統BIOS是以真實模式中斷向量的方式增加硬體功能。它要將一段類似於驅動程式的16位元代碼,放置在記憶體0x000C0000至 0x000DFFFF之間。這段記憶體空間有限(128KB),因此,當必須放置的option ROM超過128KB時,傳統BIOS便無能為力。
很多時候傳統BIOS的工程師為了解決這類問題,像剛剛提到的介面卡BIOS容量過大,便要想辦法利用可能的排列組合硬擠出空間來放驅動代碼。而重 組過程有時不小心造成一些副作用,例如才剛解決的bug,重組後又再發生!也就是說,UEFI BIOS可以更有系統的分配儲存空間,避免使用強制定址。

 

2. 什麼系統都能用

另外,傳統BIOS的硬體服務程式都是以16位元代碼的形式存在,在增強模式下執行的作業系統想存取這些服務會有困難。因此BIOS提供的服務在現實中只能提供給MS-DOS之類的系統用。
相對的,UEFI系統下的驅動並不是可以直接在CPU執行的代碼,而是用EBC(EFI Byte Code)這種專用於EFI driver的虛擬機器指令,該指令必須在UEFI的DXE階段被解壓縮後翻譯執行。
如此便有更佳的向下相容性,因為EFI driver是彈性的驅動程式模組架構,可不斷的擴充驅動程式及介面,不用重新編寫,所以就無需考慮因系統升級所衍生的相容性因素。

 

3. 開發維護更容易

加上EFI driver開發簡單,所有的PC零組件廠商都可以參與,就像現代作業系統的開發模式,這樣的模式曾使Windows系統短短幾年就變得無比強大。有了 EFI driver,也可以讓顯示卡在開機階段就載入某種程度的功能,進而可以把傳統文字介面為主的BIOS轉成圖形介面。

 

4. 精簡系統用途大

最後還有EFI Shell,這是個精簡的作業系統,可以讓使用者進行BIOS的更新、系統診斷、安裝特定軟體。有了UEFI BIOS甚至可以播放CD和DVD而不需完全載入OS,EFI driver可以被載入或卸載,連TCP/IP核心程式都可以使用。基於EFI的driver model可使UEFI系統接觸到所有的硬體功能,在進入作業系統之前瀏覽網站不再是天方夜譚,甚至實作起來也非常簡單。總之,對使用者而言,多了一個方 便的環境以及華麗的圖形介面,是最明顯的好處。
傳統BIOS vs. UEFI BIOS重點差異
BIOS種類傳統BIOSUEFI BIOS
程式語言組合語言C語言
資源控制中斷向量
寫死的記憶體存取
寫死的輸出/輸入存取
驅動程式/協定
處理器運行環境X86 16位元CPU保護模式
擴充方式接合中斷向量載入驅動程式
第三方IHV和ISV支援性較差較佳且可以支援多平台
圖形化能力較差較佳
內建簡化的作業系統前環境

 

有誰在用UEFI?

UEFI支援必須藉由軟硬體的相互合作來達成,我們來看看目前市面上流通的產品中,哪些已經採用了UEFI。

支援UEFI的硬體


1. 2006年,蘋果電腦推出第一台使用Intel處理器架構的麥金塔電腦。從此開始用EFI/UEFI framework,而非以往搭載IBM PowerPC處理器的麥金塔電腦用的、發源於Sun Microsystems(昇陽電腦公司)的Open Firmware。
▲ 目前新版的Mac OS X都已經支援UEFI。

2. Intel自家的行動型、桌上型和伺服器電腦主機板自2006年起開始全面轉換為EFI/UEFI BIOS。例如從945系列晶片組開始,Intel的主機板就已經使用了該framework。

3. 此外,2008年開始,許多64位元電腦系統也正式支援EFI/UEFI BIOS。如IBM的x3450伺服器、微星科技具備ClickBIOS的主機板(包括下一篇介紹的EFINITY主機板)、HP筆記型電腦 EliteBook系列和平板電腦、HP Compaq筆記型電腦較新的機種。
▲ 微軟到了Windows Server 2008才開始支援UEFI。

 

支援UEFI的作業系統


1. 早在2000年,Linux作業系統便可以支援EFI,當時是elilo EFIboot loader(開機載體),演化至今是EFI版本的grub。

2. 蘋果電腦到了Mac OS X 10.4(代號Tiger)的Intel版便可以支援EFI。

3. 2002年微軟給Itanium CPU使用的Windows 2000 Advanced Server Limited Edition及Datacenter Server Limited Edition版支援了EFI v1.10規範。後來的Windows Server 2003 for IA-64版和Windows XP 64-bit版本也支援EFI。至於UEFI的支援是從Windows Server 2008和Vista SP1的64位元版本開始,包括Windows 7也只有64位元版完整支援UEFI。
▲ Intel自家的D945PSN主機板。

 

微星EFINITY主機板實戰

▲ 微星科技所推出的EFINITY主機板。

這張主機板是採用Intel P35北橋加上ICH9南橋晶片組的產品。截稿時的市價落在新台幣兩千五以下。由於ICH9南橋沒有內建IDE控制器,所以微星另外安裝了一個智微科技的JMB363控制晶片。

主機板上貼有IBV的貼紙,我們可以從這張貼紙上看到微星的UEFI BIOS是由美商AMI所提供來源碼,AMI將這個UEFI BIOS產品稱做Aptio。

微星會跟AMI拿Aptio來開發第一次的UEFI BIOS並不令筆者意外,因為早在Intel當初制定EFI的時候,AMI和系微(Insyde)就是跟Intel合作的元老級成員。國內許多正在往 UEFI BIOS切入的廠商,為了產品成熟度和減短產品開發時間,都以AMI為主要合作伙伴,而筆記型電腦則有不少跟系微合作。

至於以前在Pentium時代吃香喝辣的Phoenix-Award,這回就沒那麼好命。俗話說的好,風水輪流轉,果然沒錯!

 

EFINITY主機板細部圖解

▲ 智微科技的JMB363控制器走PCI-E x1的頻寬,提供一個PATA和兩個SATA II連接埠,支援RAID 0、1、0+1和JBOD,另外也支援兩個eSATA 。
▲ 網路功能的部分,是採用了瑞昱半導體的RTL8111B控制器,支援10/100/1000快速乙太網路。
▲ 音效控制晶片是透過瑞昱半導體的ALC888控制器負責。
▲ Super I/O則是由精拓科技的F71882F G所提供,並可以進行硬體監控。
▲ EFINITY是採用美商安邁科技股份有限公司的Aptio UEFI BIOS來源碼。

UEFI介面功能體驗

將EFINITY主機板測試系統開機,我們看到了一貫的logo畫面,再來便是圖像式的BIOS介面,接著進入設定畫面,很簡潔的分成6種語言可供 選擇。 當滑鼠游標進入畫面的時候便可以點選選單。跳脫了以往傳統BIOS的純文字介面。當在地化被喊得震天價響的時代,我們也不能免俗來看看中文選單提供的功 能。包括了系統狀態、Cell Menu、晶片組設定、開機設定、密碼設定、ENFINITY Extras及儲存和離開等選項。

可惜,剩兩個Cell Menu和ENFINITY Extras沒翻中文,筆者建議前者翻成動態超頻選單,後者譯為特別功能區。此外,這個BIOS的翻譯部分有蠻多缺陷,筆者在此呼籲,希望微星在BIOS 釋出之前能有更嚴謹的品管,這樣才不會辜負UEFI圖像式BIOS提供多國語系共存的苦心。
另外,如果想看EFINITY Extras的選單還提供哪些特別的撒必死,可能會有點失望。因為很可惜的是,微星並沒有把附贈功能存入額外的Flash EEPROM,導致還要另外讀取光碟資料,讓使用者無法深刻體會UEFI BIOS的強大,建議以後的版本可以考慮改變做法。
▲ 怪怪的英文:「Power by EFI BIOS」,應該是「Powered by EFI BIOS」。
▲ EFINITY的BIOS提供了英文、簡體中文、韓文、德文、繁體中文和日文的6種文字選單。
測試平台摘要
主機板微星EFINITY(BIOS版本1.7)
中央處理器Pentium D 925
記憶體宇瞻DDR2-800 1GB x2(美光顆粒)

 

啟用EFI Shell主控台

由於EFI Shell可以辨識並載入的儲存媒體是FAT32格式,所以筆者的隨身碟被辨識為fs0。如果有接其他FAT32儲存媒體,系統便會依序列出fs1、 fs2⋯⋯。想切換到隨身碟下,只要在提示符號後輸入「fs0」就可以了。另外底下列出一些常見的指令供大家參考。
EFI Shell常用指令
輸入指令代表的意義
cd顯示或更改目前的目錄
cls清除螢幕畫面
comp比較兩份檔案的內容
date顯示目前的日期或設定系統的日期
dmem顯示記憶體的內容
edit全螢幕編輯ASCII或Unicode檔案
exit離開EFI Shell
help顯示指令清單或一個指令的意義
ls顯示檔案清單及在目錄中的子目錄
map顯示或定義對映(儲存)裝置
memmap顯示記憶體分佈對映
pci顯示PCI裝置設備
reset系統重置
time顯示目前時間或設定系統時間
type顯示檔案的內容
ver顯示版本資訊

EFI所用的指令和常見的DOS或Linux指令幾乎完全一樣,可以讓我們進行一些基本的檔案維護或系統資料的查詢。 除了輸入指令,如果各位去逛逛UEFI論壇的官方網站,可以看到有驗證規範的工具程式可以下載,只要點選網頁的UEFI Specifications and Tools即可。

 

試跑UEFI驗證測試

各位進入下載的網頁,可以下載最新版PI-SCT(PlatformInitialization Self-Certification Test;平台初始化自我認證測試)來試著在UEFI的Shell下來跑看看驗證的部分。

這個驗證程式在跑的過程中會重開機,所以在開始跑這個項目之前請各位把BIOS中的開機順序第一個設定為「Built-In EFI Shell」。而解壓縮後的PI-SCT,要事先修改SctStartup.nsh,微星EFINITY跑的是x64的程式碼,而非較早期EFI 1.10規範的IA32程式碼,所以要把sct.efi主程式路徑指向x64目錄。

改好的SctStartup.nsh命名為Startup.nsh放進隨身碟或光碟根目錄,讓程式運行的時候方便找到檔案位置。 另外,上面的官網裡也有最新的UEFI 2.2版官方資料,內容陳述所有該版本中的協定。有興趣的讀者可以一併下載回來,跟跑完的PI-SCT記錄檔好好比對。
跑這些協定驗證的目的在於證明前面我們提到的嚴謹性,從記錄檔中的「PASSED」和「FAILED」,就能知道這張主機板符合多少UEFI 2.2版制訂的規範,如果沒辦法通過驗證工具測試,那充其量不過是張有圖形介面的傳統BIOS罷了!
▲ 在BIOS畫面選擇「儲存及離開」,將啟動等級選為「Built-In EFI Shell」。
▲ 接下來畫面上會出現EFI Shell。
▲ 找到SctStartup.nsh檔,將圖中的區域改成上面的執行路徑。
▲ 等程式跑完,便會顯示通過了哪些測試。

 

UEFI的未來

從各大IBV及軟硬體龍頭,都替這個新一代BIOS技術抬轎的情況來看,讀者們將會在可預見的未來,看到越來越多主機板甚至介面卡的BIOS或韌體,採用符合UEFI規範的方式來編寫和製作。
有了圖形化的介面,UEFI BIOS既可以讓使用者享受更親和的操作環境,又能夠在不進入OS的情況下進行一些基本操作。對廠商而言,模組化好維護的BIOS編碼及相對容易尋找的C語言編寫人才,更可以加速產品開發時程。對消費者和廠商都是雙贏。
希望能有機會看到更多廠商在這塊進化的BIOS領域耕耘,讓大家都能享受到更好用的產品。微星對這項新技術的努力值得嘉許,但是類似的功能,華碩利 用傳統BIOS也能成功實踐,就是該公司所謂的ExpressGate。 由此看來,微星最好進一步加入更多實用的功能,才能在使用者的心目中獲得壓倒性的勝利。


轉自 T客邦





Dell's Digital Forensics Solution Overview

Alternate Data Streams (ADS) 介紹

雖然說 NTFS 問世至今已經經過了 10 多年,但是有一個功能卻依舊很少人知道。嗯,或許應該說一般正常使用者很少知道。這個功能叫做 Alternate Data Streams, 簡稱 ADS 。

用白話的方式來說, ADS 允許一個檔案可以挾帶其他的資訊,而這些資訊當初的規劃是為來做為 Metadata 使用。很玄,我也承認。因為在日常的使用中,根本沒有那個應用程式會利用到 ADS 。甚至連微軟自家的檔案瀏覽器都無法顯示這些資料的存在,更別說可以新增或修改了。



為了瞭解此一設計的初衷,我查了一下資料,才發現這並 不是微軟自己的發明,在不少檔案系統都有類似的設計。這類的 Metadata 可以用來儲存顯示檔案的圖示,也可以用來儲存文書檔案的顯示格式,乍聽之下好像還道理的…但是好像也不是那麼有道理。不管如何,ADS 依舊是一個不為一般人知的祕密,也沒有給我們帶來任何的改變。


不過也因為雖然檔案系統支援這樣的功能,但是在絕大多數的應用程式都無法使 用此一功能的情況下,利用 ADS 加以儲存的資料幾乎可以說是隱形的,所以成了用來隱藏不希望別人發現的資料的方法。這樣的隱藏方式雖然不錯,但是有幾個比較大的問題,一個是這樣的隱藏在 支援 ADS 的程式下是沒有任何效果。另外一個就是如果要隱藏一大堆的檔案、甚至於是目錄,這樣的方式並不適合。最嚴重的問題是當原始檔案被刪掉後,這些隱藏資料也會 被一併刪除。所以除非你自己有很好的記性,不然就可能是欲哭無淚了。


一般情況下我們想要隱藏資料,可以選擇像是 Invisible Folders 這類的軟體,不但使用上更為方便,而且效果也較好。那麼,誰適合用 ADS 來隱藏資料呢,或者說必須使用 ADS 來隱藏資料?答案通常是那些不懷好意的分子(例如駭客)。所以病毒可以掛在某個正常檔案的 ADS 內避免被偵測,後門程式也可以,駭客慣用的小工具也可以。不管是哪一類檔案,都是為了避免被輕易發現。雖然通常 Rootkit 也具備有相同的功能,但是 ADS 使用上更為簡單,也不會造成系統任何異常或不穩定的現象,而這些都是駭客會加以考量的要素。


像這種實際使用與原始初衷相差甚遠的例子也不算少見,就像水可載舟、亦可覆舟一樣,好或壞完全取決於使用者的心態。微軟也確實做了一些改變想要避免產生嚴重的危害,但是效果畢竟還是有限。我們來實際看看 ADS 的使用方式。


我針對 ADS 做了基本介紹。在本篇文章中,我將繼續此一話題,並將介紹重點移至如何實際進行 ADS 的相關操作。篇幅有些長,但是因為大多是截圖的關係,所以在閱讀上應該是不會花費太多的時間。


  1. 首先我們建立一個空的目錄(D:\ads),並在此一目錄下進行測試。
    0001 

  2. 我們產生一個一般的文字檔,內容是”Hello World”,大小為16位元組。
    0002
  3. 透過 type 指令確認檔案內容為”Hello World”。
    0003
     
  4. 接下來我們使用下列指令產生 ADS 資料,其中 hello.txt:hidden.txt 表示將名為 hidden.txt 的 ADS 資料附掛在 hello.txt 上。檔案內容為 “I’m Hidden”。
    0004
  5. 檢查一下檔案,雖然時間變了,但是大小卻沒有變
    0005
  6. 查看原始檔案內容,同樣沒有任何變動。
    0006
  7. 使用 type 指令如法炮製,看看 ADS 內容是甚麼。很不幸的,系統顯示找不到這個檔案。難道是指令下錯了?
    0007
  8. 改用記事本試看看,沒有錯誤訊息。
    0008
  9. 筆記本顯示出我們原先輸入的內容,而且注意檔名正是 hello.txt:hidden (最後一個txt的副檔名被記事本自動隱藏了)。由此證明雖然 hello.txt 的檔案大小沒有改變,而且 type 指令也無法顯示,但是我們剛剛輸入的資料確實被儲存在 ADS 中。 事實上,使用其他應用程式也可以看到這個檔案的內容。
    00009
  10. 一個檔案可以擁有多個 ADS 資料,而且不需要同樣的類型。我們將一個執行檔 (calc.exe) 覆掛在 hello.txt 中,原先 hello.txt 已經有另外一個 ADS 資料,名稱為 hidden.txt
    0010
  11. 雖然之前我們曾經使用 dir 指令時無法看到任何有關 ADS 的資訊,但是其實 dir 有一個參數 - /r 可以用來查看 ADS 資訊。透過 dir * /r 指令我們確認 hello.txt 有兩個 ADS 資料。不過很可惜的是, /r 參數在Vista 之前的 Windows 版本是不提供的。
    0014
  12. 我們嘗試直接執行儲存於 ADS 內的檔案,系統出現錯誤訊息。
    0011
  13. 上網查詢,可以找到程式啟動的方式必須透過 start 這個指令,執行後卻同樣出現錯誤。 如果你出現跟我一樣的錯誤,恭喜你,表示你的系統至少不是很舊的系統。
    0017

    0022
  14. 為了證明資料不假,我特定找了一個 Windows 2000 的系統,並將小算盤 (calc.exe) 覆掛在 xcopy.exe 的 ADS (ADS 名稱為 hidden.exe) 中。同樣的,直接執行會出現錯誤,但是使用 start 指令可以正確的呼叫出小算盤。
    0012
  15. 查看執行程序,可以看到 xcopy.exe 在執行中,卻看不到 calc.exe 在執行,可是實際上真正執行的程式是 calc.exe。此為一大問題,表示 ADS 的檔案就算被執行了,也無法從工作管理員中看到,而且不需要使用到 rootkit 的技術
    0013 
  16. 如果你以為只有舊系統才會有這個問題,新系統已經免疫了,先別高興得太早。我們先將一個名為 hfs.exe 的檔案附掛在 calc.exe 的 ADS 之中以備測試。0016
  17. 使用 start 指令依舊失敗,這次我們改用 runas 這個指令來啟動程式。
  18. 0018

    0019
  19. hfs.exe 被正確啟動了,而且是在 Vista SP1 的環境下
    0020
  20. 唯一值得慶幸的是在工作管理員的顯示名稱為 calc.exe:hfs.exe ,而不再僅是 calc.exe
     0021
  21. 當我們嘗試複製包含 ADS 資料的檔案時,ADS 資料也會被一併複製 (只要目的磁碟區也支援 ADS 的功能)。我們看到透過複製的指令 hello2.txt 包含與 hello.txt 相同的 ADS 資料。
    0015 
透過前面的例子,我們看到儲存於 ADS 的資料不但不容易被發現,而且可以被正常的讀取、修改、甚至是執行。雖然微軟也確實做了部分的修正,來避免原先 ADS 可能造成的損害,但是卻不是全面的。以我個人的看法,這樣部分的修改比原先不修改可能還來的更差。原因是這樣會造成更多不一致的現象(尤其是同一個系統內 的不一致),而不一致往往造成使用者的混淆,甚至誤解,因而衍生額外的問題。


除了透過微軟內建的指令外,也有一些第三方的工具可以處理 ADS 的資料。像 Alternate Data Stream Tools for NTFS 這個工具可以掃描並列出系統中所有的 ADS 資料,算是一個很方便的小工具。


轉自 就是資安

鑑識工具 - DEFT 6 發佈!

I’m happy to announce that DEFT 6 Release Candidate is OUT!
Sorry guys but I have decided to delay the release of the version 6 because I couldn’t deeply tested it YET. Everything should be ok!
However,here are the main new features of  DEFT 6:



  • LXDE;
  • Linux Kernel 2.6.35;
  • DEFT Extra 3 (Windows Side);
  • Sleuthkit 3.2.0;
  • Autopsy 2.24;
  • Digital Forensic Framework (DFF) 0.8;
  • Xplico 0.6.1;
  • Dhash 2.0.1;
  • Guymager 0.5.7;
  • Hunchbacked 4most 0.6;
  • Log2timeline 0.50;
  • Foremost, Scalpel e Photorec file carver;
Is that not enough? :-)
  • usb 3 ready;
  • full integration using wine for run windows forensic tool under linux;
  • full support for Intel Mac OSX systems;
  • full support for the most common file systems;
  • full support for logical volume manager;
  • full support for afflib and ewflib.

For a full list please refer to this page
IISFA appreciates DEFT project as a contribution to the development of the Computer Forensic analysis. The appreciation of IISFA is both scientific and cultural.
This work represent the work of the DEFT team and not of the IISFA association.
PLEASE remember that this is a RELEASE CANDIDATE!!!
this version have the  potential to be THE final product, It’s ready to release unless fatal bugs emerge. If you find any bugs, please fell free to let me know by the support forum, email  ( bug AT deftlinux.net ) or by the https://launchpad.net/deft website
Finally (and not least of all!) a special thanks to all the people that worked with me as volunteers: Salvo Tarantino, Davide Gabrini, Massimiliano Dal Cero, Bartolomeo Bogliolo , Sandro Rossetti and Valerio Leomporra.
Thank you guys!
More news will follow as soon as the final version will be ready (less than a week and cross your finger!)
Stefano Fratepietro
p.s: new DEFT logo!

轉自 DEFT

Outpost Security Suite Free 7.0 免費HIPS軟體

outpost-24

一般我們所說的免費版小紅傘Avast!AVG,都只是單純的防毒軟體,缺乏電腦安全防禦中也很重要的防火牆HIPS等功能;防毒軟體可以辨認並抓出惡意程式,防火牆則可以過濾可疑的連線行為,而HIPS能幫你抓出系統內的可疑動作或修改,三者相互輔助才能提供更全面的安全防禦。

至於同時具備防毒、防火牆、HIPS等功能,又是免費的全套安全軟體,我自己最常使用的是「Comodo Internet Security」;而前一陣子從友站免費資源網路社群看到另外一款同樣具備全套安全功能的「Outpost Security Suite free」,試用了一個星期感覺很順手,並且其功能與介面都設計得頗完善,因此今天就來分享一下心得。

我記得很久以前有用過免費版的Outpost Firewall 1.0版,不過真的有一段時間沒有接觸Outpost的產品了;所以這次特別上網查詢了一下Outpost Security Suite free的評價,發現它在VB100防毒測試(Outpost=Agnitum)和matousec防駭測試中都有不錯的表現,整套免費安全中心在國外軟體網站也都有中上的評分;應該是值得一試。


  • Outpost Security Suite free:http://free.agnitum.com/
  • 功能特色:
  • 通過VB100防毒測試的防毒引擎(參考就好)。
  • 結合防毒(找出惡意程式)、防火牆(阻擋網路可疑連線)與主動式防禦(監控系統內可疑動作)三大安全必備功能。
  • 不錯的效能速度。
  • 具備「自動學習」功能,讓用戶能在初期快速建立系統內常用規則。
  • 免費。

下面,我就把最近幾天的使用過程做個詳細介紹。

安裝與免費註冊:
01.
Outpost Security Suite有Free版和Pro版,因為電腦玩物一向都是介紹免費軟體所以這裡我們選擇免費版進行安裝(Basic Protection)。
安裝過程很簡單,只要照著順序安裝即可。

outpost-01

02.
Outpost Security Suite free雖然可以免費使用,但必須先註冊一個也是免費的Agnitum(Outpost)帳戶,用這個帳戶登入你的安全軟體就能獲得365天免費使用的期限,並且一定要登入才能使用病毒資料庫更新功能。
我們可以在Outpost Security Suite free安裝過程的最後,看到彈出的註冊詢問視窗(Registration),點擊右下方〔Register〕進行免費註冊,然後將獲得的認證碼透過〔Enter Key〕輸入軟體中即可。
outpost-05

03.
基本上Outpost Security Suite free安裝完成後,對一般用戶來說「依照預設設定」就能有效防護系統安全,並且避免過度複雜深入的操作,所以一般用戶不需要去做額外的調整。
而且Outpost Security Suite free軟體介面整體上清楚易用,重點功能都可以在第一個主畫面中快速調整;一些較複雜的細節設定都隱藏在後台控制中,主介面上的操作都很直覺,就是開啟、關閉安全功能而已。
這樣的設計應該有助於一般用戶快速上手。
outpost-00


防火牆、防毒、防駭功能概說:
01.
在Outpost Security Suite free主介面左方切換到「Firewall(防火牆)」頁面,你可以在這裡看到系統內有哪些程式正在進行網路連線。
Firewall的用途是可以偵測所有系統內的連線程式,並且幫你建立安全規則,決定是不是要允許這個程式進行網路連線傳輸。
防火牆和防毒不同,防毒是依據一個病毒資料庫來判斷這個程式有沒有問題,而防火牆則是會監控「所有」正常或不正常的程式,然後讓用戶擁有完全自主決定連線規則的彈性(例如你可以決定Firefox只能傳出資料,不可以傳入資料等等)。
outpost-11

02.
接著切換到大家比較熟悉的「Anti-Virus(防毒)」頁面,Anti-Virus就和一般防毒軟體一樣,依據病毒資料庫檢查你系統內的程式安不安全。
outpost-12

03.
而來到「Anti-Leak(防駭)」功能頁面,一般我們會說Firewall是網路連線防火牆,而Anti-Leak是系統動作防火牆;它們都不是依據一個病毒資料庫來判斷程式有沒有問題,而是「監控所有程式」。
Anti-Leak可以監控系統內程式的所有動作,並且在某個程式出現可疑的動作時提醒你,讓你建立允許或不允許的規則(例如某個程式想要修改你的系統核心,你就可以決定要不要給它修改)。
outpost-13

04.
最後Outpost Security Suite free還具備了垃圾郵件過濾功能(Anti-Spam),但是有鑑於現在使用郵件軟體的人愈來愈少(Outlook等),而且即使是郵件軟體也都內建垃圾郵件過濾功能,所以Anti-Spam項目我建議直接關閉就好,一般用戶應該都用不到。
outpost-14

 
預設開啟的自動學習模式:
01.
這邊有一個重點提醒,剛剛安裝完Outpost Security Suite free的用戶務必要注意到一件很重要的事情,那就是Outpost Security Suite free預設開啟了「Auto-Learn Mode(自動學習模式)」。
當開啟「自動學習模式」後,所有程式的動作與連線,都會自動建立允許的規則(也就是前面提到的Firewall、Anti-Leak會自動放行所有程式)。
這個功能主要是幫助剛剛安裝Outpost Security Suite free的用戶,假設你電腦內已經安裝的軟體全部都是安全的,於是可以用這個方式快速建立該有的規則。

outpost-09

02.
但是一直開啟「自動學習」的話,防火牆、HIPS就沒有防禦效果,所以當你透過自動學習讓Outpost Security Suite free快速建立常用規則後,就應該去關閉這個功能。
我們可以到右下方系統列的Outpost Security Suite free圖示上點擊右鍵,在選單中關閉「Auto- Learn Mode」即可。
後續如果有需要使用自動學習功能的話,也可以到這裡開啟,並且可以預設開啟一小時、一天等自動學習時限。

outpost-10


適用全螢幕程式的娛樂用模式:
01.
「自動學習」其實是一個好功能,可以節省剛剛安裝完Outpost Security Suite free後建立系統規則的時間,只要記得適時去關閉它即可。
而Outpost Security Suite free還有一個體貼用戶的設計,你可以在後台設定的「General」頁面中勾選「Detect attempts to launch full-screen applications(Entertainment mode)」,這個功能的用意是讓你執行全螢幕程式時可以避免安全軟體的不正常干擾。

outpost-15

02.
例如你要執行全螢幕遊戲時,就會彈出視窗問你是否要切換到「全螢幕娛樂模式」中,點擊〔Switch〕後,當你在遊戲時就不會被突然彈出的安全詢問視窗打斷。
另外,當進入「全螢幕娛樂模式」中,Outpost Security Suite free會預設禁止你大多數尚未建立規則的網路連線,既不干擾你,也仍然保障了你的系統安全。
而離開遊戲等全螢幕程式後,就會自動關閉「娛樂模式」,回到正常的保護狀態。
outpost-28


每天只能更新一次:
Outpost Security Suite free免費版中,預設每天只能更新一次病毒資料庫,而且是很嚴格真的每天只能更新一次,即使你要手動常常更新也不行。你可以在後台設定的「Update」中,決定更新時間。
outpost-16


自動幫可信任程式建立預設規則:
01.
為了讓一般用戶也能更容易上手,所以在後台設定的「ImproveNet」頁面,可以勾選「Automatically create rules for applications signed by trusted vendors」,這樣一來只要包含在Outpost Security Suite free安全資料庫中的「可信任程式」都可以自動建立規則。

outpost-17

02.
舉 例來說,像是FileZilla這樣全球知名的程式,就可以自動建立相關規則。這裡會出現兩種情況,一種是針對「Anti-Leak」自動就幫你允許可信 任程式的所有動作;另外一種是在「Firewall」連線警示視窗中,你可以選擇內建的程式規則,例如在「Create rules using preset」中選擇【Filezilla】。
這樣的功能有助於操作Outpost Security Suite free與設定安全規則時的方便性。

outpost-29


進階用戶專用!詳細設定每個程式的安全規則:
01.
一般用戶就像前面說的,只要依據預設功能操作即可,頂多就是在彈出警示視窗時選擇允許或不允許。
而如果是進階用戶的話,則可以到後台設定的「Application Rules」中,決定每一個程式的連線動作、系統動作的規則。

outpost-18

02.
例如你可以決定這個程式可不可以獲取你的鍵盤動作、可不可以控制你的視窗畫面等等,在「Anto-Leak」中你擁有完全的系統安全掌控權。
outpost-19


防火牆、防毒、防駭安全等級設定:
01.
預設的Outpost Security Suite free安全層級最適合一般用戶,整體來說會自動允許大部分正常的動作,然後在比較可能有問題的動作出現時提醒用戶。
在「Firewall」安全等級設定中,預設的安全等級是「Rules Wizard」,也就是所有的連線動作都會彈出視窗詢問你要不要允許,讓你完全自訂。

值得注意的是,Outpost Security Suite free在防火牆規則中預設勾選「Run in stealth mode」,這可以讓你的電腦在網路中隱形而不容易被發現,但也有可能導致一些P2P軟體下載上有問題,用戶可以自行注意一下這個設定。

outpost-20

02.
而在「Anti-Virus」安全等級設定中,預設值為「Optimal」,也就是會依據病毒資料庫辨認有問題的程式,但是會自動避開太大的檔案,以免造成效能問題。
你可以調高或調低安全等級設定。

outpost-21

03.
而在「Anti-Leak」中則是設定在「Optimal」安全等級,這是一個比較寬鬆的等級,只會保護「最可能有問題」的系統動作,而會放行大多數應該沒問題的系統動作。
就像我前面說的,這是最適合一般用戶的設定值,但你也可以在這裡自己調高安全等級,或是利用「Customize」自己決定哪些動作要彈出警示(會讓彈出警告視窗變得很繁瑣,但也相對安全)。

outpost-22


安全警示視窗的操作介面
Outpost Security Suite free的安全警示彈出視窗中,可以進行允許或不允許的互動操作,警告視窗的種類可能有病毒警告、連線警告、系統修改動作警告等,用戶要自行判斷。
例如下圖是詢問你要不要允許這個程式連線上網,你可以勾選「Allow all activities for this application」後,點擊〔OK〕,就能設定這個程式的永久允許連線規則。
除此之外,你也可以暫時允許或不允許這個程式的動作(Allow Once、Block Once),等到下次還有同樣動作時就會再彈出視窗。

outpost-26


小結:
outpost-27

在軟體的運作效能上,Outpost Security Suite free基本上很快速,也不會明顯影響到系統運作,在記憶體佔用上大概需要40~60MB(看當時的監控狀況而定),整體來說效能上是很不錯的。
如果你想要試試看一套同時包含防毒、防火牆、HIPS防駭功能的全套安全軟體,並且以免費軟體為首選,那麼除了Comodo外,這套Outpost Security Suite free也值得一試。


轉自 電腦玩物

有關逆向分析惡意程式

Reverse-Engineering Malware Cheat Sheet

This is a cheat sheet of shortcuts and tips for reverse-engineering malware. It covers the general malware analysis process, as well as useful tips for OllyDbg, IDA Pro, and other tools. Feel free to customize it to your own needs. My reverse-engineering malware course explores these, and other useful techniques.



General Approach

  1. Set up a controlled, isolated laboratory in which to examine the malware specimen.
  2. Perform behavioral analysis to examine the specimen’s interactions with its environment.
  3. Perform static code analysis to further understand the specimen’s inner-workings.
  4. Perform dynamic code analysis to understand the more difficult aspects of the code.
  5. If necessary, unpack the specimen.
  6. Repeat steps 2, 3, and 4 (order may vary) until sufficient analysis objectives are met.
  7. Document findings and clean-up the laboratory for future analysis.

Behavioral Analysis

Be ready to revert to good state via dd, VMware snapshots, CoreRestore, Ghost, SteadyState, etc.
Monitor local (Process Monitor, Process Explorer) and network (Wireshark, tcpdump) interactions.
Detect major local changes (RegShot, Autoruns).
Redirect network traffic (hosts file, DNS, Honeyd).
Activate services (IRC, HTTP, SMTP, etc.) as needed to evoke new behavior from the specimen.

IDA Pro for Static Code Analysis

Text searchAlt+T
Show strings windowShift+F12
Show operand as hex valueQ
Insert comment:
Follow jump or call in viewEnter
Return to previous viewEsc
Go to next viewCtrl+Enter
Show names windowShift+F4
Display function's flow chartF12
Display graph of function callsCtrl+F12
Go to program's entry pointCtrl+E
Go to specific addressG
Rename a variable or functionN
Show listing of namesCtrl+L
Display listing of segmentsCtrl+S
Show cross-references to selected functionSelect function name » Ctrl+X
Show stack of current functionCtrl+K

OllyDbg for Dynamic Code Analysis

Step into instructionF7
Step over instructionF8
Execute till next breakpointF9
Execute till next returnCtrl+F9
Show previous executed instruction-
Show next executed instruction+
Return to previous view*
Show memory mapAlt+M
Follow expression in viewCtrl+G
Insert comment;
Follow jump or call in viewEnter
Show listing of namesCtrl+N
New binary searchCtrl+B
Next binary search resultCtrl+L
Show listing of software breakpointsAlt+B
Assemble instruction in place of selected oneSelect instruction » Spacebar
Edit data in memory or instruction opcodeSelect data or instruction » Ctrl+E
Show SEH chainView » SEH chain
Show patchesCtrl+P

Bypassing Malware Defenses

To try unpacking quickly, infect the system and dump from memory via LordPE or OllyDump.
For more surgical unpacking, locate the Original Entry Point (OEP) after the unpacker executes.
If cannot unpack cleanly, examine the packed specimen via dynamic code analysis while it runs.
When unpacking in OllyDbg, try SFX (bytewise) and OllyDump's "Find OEP by Section Hop".
Conceal OllyDbg via HideOD and OllyAdvanced.
A JMP or CALL to EAX may indicate the OEP, possibly preceded by POPA or POPAD.
Look out for tricky jumps via SEH, RET, CALL, etc.
If the packer uses SEH, anticipate OEP by tracking stack areas used to store the packers' handlers.
Decode protected data by examining results of the decoding function via dynamic code analysis.
Correct PE header problems with XPELister, LordPE, ImpREC, PEiD, etc.
To get closer to OEP, try breaking on unpacker’s calls to LoadLibraryA or GetProcAddress.

Common x86 Registers and Uses

EAXAddition, multiplication, function results
ECXCounter
EBPBase for referencing function arguments (EBP+value) and local variables (EBP-value)
ESPPoints to the current "top" of the stack; changes via PUSH, POP, and others
EIPPoints to the next instruction
EFLAGS Contains flags that store outcomes of computations (e.g., Zero and Carry flags)

Post-Scriptum

If you have suggestions for improving this cheat sheet, please let me know.
Creative Commons v3 "Attribution" License for this Cheat Sheet v.1.6.
Take a look at my other security cheat sheets.