成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

網絡安全編程:x86匯編語言之寄存器

安全
任何程序的執行,歸根結底,都是存放在存儲器里的指令序列執行的結果。寄存器用來存放程序運行中的各種信息,包括操作數地址、操作數及運算的中間結果等。下面來熟悉各種寄存器。

 [[389551]]

任何程序的執行,歸根結底,都是存放在存儲器里的指令序列執行的結果。寄存器用來存放程序運行中的各種信息,包括操作數地址、操作數及運算的中間結果等。下面來熟悉各種寄存器。

1. CPU工作模式

x86體系的CPU有兩種基本的工作模式,分別是實模式和保護模式。

實模式也稱為實地址模式,實現了Intel 8086處理器的程序設計環境。該模式被早期的Win 9x和DOS所支持。實模式下可以訪問的內存為1MB。實模式可以直接訪問硬件,比如直接對端口進行操作,對中斷進行操作。現在的CPU仍然支持實模式,一是為了與早期的CPU架構保持兼容,二是因為所有的x86架構處理器都是從實模式引導起來的。

保護模式是處理器主要的工作模式,Linux和Windows NT內核的系統都工作在x86的保護模式下。保護模式下,每個進程可以訪問的內存地址為4GB,且進程間是隔離的。

2. 基本寄存器

寄存器是CPU內部的高速存儲單元,訪問速度比內存快得多,而價格也高很多(在單位價格內,寄存器的價格要比內存貴,內存要比硬盤貴)。CPU中,常用的寄存器分為4類,分別是8個通用寄存器、6個段寄存器、1個標志寄存器和1個指令指針寄存器,如圖1所示。

圖1  x86處理器的基本寄存器

(1)通用寄存器

通用寄存器主要用于各種運算和數據的傳送,每個寄存器都可以作為一個32位、16位或8位來使用,如圖2所示。

圖2  通用寄存器示意圖(一)

對于圖2來說,可以將一個寄存器分別當8位、16位或32位來使用。EAX寄存器可以存儲32位的數據。EAX的低16位可以表示為AX,可以存儲16位的數據。AX寄存器又可分為AH和AL兩個8位的寄存器,AH對應AX寄存器的高8位,AL對應AX寄存器的低8位。

只有數據存儲寄存器可以按照這樣的方式進行使用。由圖1可知,數據存儲寄存器有EAX、EBX、ECX和EDX 4個。

(2)通用寄存器的使用方式及特殊用途

指針變址寄存器可以按照32位或16位進行使用,如圖3所示。

圖3  通用寄存器示意圖(二)

對于圖3來說,只可以將一個寄存器分為32位或16位進行使用。ESI寄存器可以存儲32位的指針,其中低16位可以表示為SI,存儲16位的指針,但是無法像AX那樣能拆分成高8位和低8位。

各通用寄存器可以使用的方式如圖4所示。

圖4  各通用寄存器可以使用的方式

關于通用寄存器中有部分寄存器有特殊用途:

① EAX在乘法和除法指令中被自動使用;

② CPU自動使用ECX作為循環計數器;

③ ESP尋址堆棧(準確地講,應該是棧,其實“堆”是“堆”,“棧”是“棧”,就如同“刀劍”雖然合起來稱呼,其實是兩種不同的兵器)上的數據,ESP寄存器一般不參與算數運算,通常稱為棧指針寄存器;

④ ESI和EDI通常用于內存數據的高速傳送,被稱為源指針寄存器和目的指針寄存器;

⑤ EBP由高級語言用來引用參數和局部變量,通常被稱為棧幀基址指針寄存器。

(3)指令指針寄存器

指令指針寄存器EIP是一個32位的寄存器。在16位的環境中,其名稱為IP。EIP寄存器通常保存著下一條要執行的指令的地址。下一條指令的地址為當前指令的地址加當前指令的長度。

特殊(其實也算不上通常與特殊)情況是當前指令為一條轉移指令,比如JMP、JE、LOOP等指令,會改變EIP的值,導致CPU執行指令產生跳躍性執行,從而構成分支與循環的程序結構。

EIP中的值始終在引導CPU的執行。

(4)段寄存器

段寄存器被用于存放段的基地址,段是一塊預分配的內存區域。有些段存放有程序的指令,有些則存放有程序的變量,另外還有其他的段,如堆棧段存放著函數變量和函數參數等。在16位CPU中,段寄存器只有4個,分別是CS(代碼段)、DS(數據段)、SS(堆棧段)和ES(附加段)。

在32位CPU中,段寄存器從4個擴展為6個,分別是CS、DS、SS、ES、FS和GS。FS和GS段寄存器也屬于附加的段寄存器。

(5)標志寄存器

在16位CPU中,標志寄存器稱為FLAGS(有的書上是PSW,即程序狀態字寄存器)。在32位CPU中,標志寄存器也隨之擴展為32位,被稱為EFLAGS。

關于標志寄存器,16位CPU中的標志已經滿足于日常的程序設計所用,這里主要介紹16位CPU中的標志。標志寄存器如圖5所示。

圖5  16位的標志寄存器

圖5說明,標志寄存器中的每一個標志位只占1位,而16位的標志寄存器并沒有全部使用。16位的標志寄存器分為兩部分,分別是條件標志和控制標志。

條件標志寄存器說明如下。

① OF(Overflow Flag):溢出標志位,溢出時為1,否則為0。

② SF(Sign Flag):符號標志,運算結果為負時,為1,否則為0。

③ ZF(Zero Flag):零標志,運算結果為0時,為1,否則為0。

④ (Auxiliary carry Flag):輔助進位標志,記錄運算時第3位(半字節)產生的進位,有進位時為1,否則為0。

⑤ (Parity Flag):奇偶標志,結果操作數中1的個數為偶數時,為1,否則為0。

⑥ CF(Carry Flag):進位標志,產生進位時為1,否則為0。

控制標志寄存器說明如下。

① DF(Direction Flag):方向標志,在串處理指令中用于控制方向。

② IF(Interrupt Flag):中斷標志。

③ TF(Trap Flag):陷阱標志。

在日常的使用過程中,較為常用的標志有CF、PF、ZF、SF、DF和OF。

16位CPU中的標志在32位CPU中繼續使用,32位擴展了4個新的標志位。 

 

責任編輯:龐桂玉 來源: 計算機與網絡安全
相關推薦

2011-01-14 14:08:17

Linux匯編語言

2011-01-14 14:39:32

Linux匯編語言

2011-01-14 14:15:11

Linux匯編語言

2011-01-14 14:22:50

Linux匯編語言

2011-01-14 13:44:45

Linux匯編語言

2012-02-09 09:00:54

匯編語言

2016-10-13 13:23:48

服務器

2023-09-14 12:35:28

寄存器

2021-03-03 12:20:42

網絡安全DLL編程

2016-09-22 09:37:14

GCC內聯語法

2012-06-28 10:38:45

Web

2014-12-24 09:41:05

x86C#

2014-03-14 09:58:49

服務器ARMx86

2021-01-26 13:45:03

網絡安全Winsock編程

2021-03-05 13:46:56

網絡安全遠程線程

2011-12-01 11:09:48

AMDx86服務器英特爾

2021-04-14 15:53:58

網絡安全C語言wcslen

2014-09-18 10:33:44

2021-02-23 10:20:07

網絡安全進程代碼

2021-02-21 18:19:43

網絡安全網絡安全編程創建進程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产永久免费 | 国产精品久久久亚洲 | 成人av鲁丝片一区二区小说 | 欧美激情一区二区三区 | 色伊人| 欧美激情一区二区 | 午夜国产一级 | 国产一区二区三区免费视频 | 日韩日韩日韩日韩日韩日韩日韩 | 在线免费观看成人 | 日韩在线电影 | 亚洲一区二区三区四区五区午夜 | 色男人的天堂 | 麻豆国产一区二区三区四区 | 精品福利在线视频 | 国产成人网 | 中文字幕一区在线 | 成人免费一级视频 | 欧美视频在线免费 | 免费观看一级特黄欧美大片 | 国产精品久久久久久久久久免费看 | 黄网址在线观看 | 亚洲天堂av在线 | 久久精品亚洲精品 | 涩涩视频在线观看 | 精品一区二区三区在线观看国产 | 麻豆91av| 亚洲国产精品成人综合久久久 | 久久一二区 | 亚洲视频在线观看免费 | 亚洲国产一区二区三区四区 | 久久青青 | 日韩av一区二区在线观看 | 日韩高清成人 | 久久精品国产精品青草 | 欧美午夜精品理论片a级按摩 | 亚洲综合热 | 2021狠狠干 | 亚洲国产成人在线观看 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 久久最新 |