教程 逆向反彙編第九課

2021-09-30 08:28:17 字數 751 閱讀 5329

條件設定指令的形式是:setcc r/m8,其中r/m8是表示8位暫存器或單位元組記憶體單元.

條件設定指令根據處理器定義的16種條件cc,測試一些標誌位,然後把結果記錄到目標運算元中.當條件滿足時,目標運算元會被置1,否則置0.這16種條件與條件轉移指令jcc中的條件是一樣的.

條件設定指令可以用來消除程式中的轉移指令.在c語言裡,常會見到執行以下功能的語句:

c=(a

如果使用條件設定指令,編譯器將會產生不包含條件分支的邏輯判斷**:

也可用條件轉移傳輸指令cmov或fcmov去除程式中的轉移指令,但是他們僅僅被pentium pro以後的處理器支援.實現同樣功能的**入下:

一些編譯器優化時,在不改變原邏輯的情況下,使用數學技巧把源**中的一些邏輯分支轉變成算術操作,消除或減少程式**現的條件轉移指令.可以提高cpu的流水線效能

看一段c的**:

用vc編譯連線後,其反彙編**如下:

編譯生成的**沒有一句跳轉轉移指令,卻實現原程式的邏輯.**首先用neg指令檢查eax是否為0,結果存放在cf標誌位中.sbb指令將目的運算元減去源運算元,再減去減去借位cf(進製),結果送到目的運算元/"sbb eax,eax/"這句的結果由cf決定,當cf為1時,eax為-1,否則為0,用偽碼來表示:

接下來兩句指令根據eax的值:fffffffh和0來決定最終結果,當eax是ffffffffh的結果是1;當eax是0時,計算結果為2.

這類**比較常見,當知道是條件轉移轉移指令優化生成的,還原就比較簡單了.

VBScript教程 第九課VBScript過程

vb教程 vbscript過程 過程分類 在 vbscript 中,過程被分為兩類 sub 過程和 function 過程。sub 過程 sub 過程是包含在 sub 和 end sub 語句之間的一組 vbscript 語句,執行操作但不返回值。sub 過程可以使用引數 由呼叫過程傳遞的常數 變數...

第九課 變數

任務與 修改 沒有定義變數r,在第四行float r1,r2之後加上r就可以 include include intmain 閱讀程式 閱讀下面的程式,在閱讀過程中,請為每乙個變數畫出乙個方框,代表對應的記憶體空間。隨著閱讀,標明變數的變化過程,達到讀懂程式的目的。include intmain 圖...

C語言第九課

主要內容 高階指標 結構體指標 一 結構體指標 指向結構體變數的指標叫做結構體指標 typedef struct student student student stu student p stu student 結構體型別的指標 型別 p 結構體指標變數 變數名 結構體訪問成員變數 示例 type...