寫這篇文章得益於我最近錢林松、趙海旭寫的新書《c++反彙編與逆向分析》,一直希望學習相關的技術,但是一直沒有開始,看到此書後,激發起了我以前的興趣,最近一直在讀這本書,今日將我了解到的知識分享給大家。
首先讓我們來看一段最簡單的**
#includevoid func(int first, int second)
int main()
通過vc6++ 在win7 上編譯得到的彙編**如下:
public _func
; comdat _func
_text segment
_func proc near ; comdat
; 4 :
pop edi ;還原暫存器
pop esi ;還原暫存器
pop ebx ;還原暫存器
mov esp, ebp ;還原 esp
pop ebp ;彈出呼叫者的棧底 即main函式的棧底
ret 0
_func endp
_text ends
public _main
extrn __chkesp:near
; comdat _main
_text segment
_first$ = -4
_second$ = -8
_main proc near ; comdat
; 8 :
pop edi ;還原暫存器
pop esi ;還原暫存器
pop ebx ;還原暫存器
add esp, 72 ; 00000048h 平衡棧空間
cmp ebp, esp ;棧平衡檢測
call __chkesp ;棧平衡檢測函式
mov esp, ebp ;還原 esp
pop ebp ;彈出呼叫者的棧底 注意main函式不是第乙個函式,它也是被其他函式呼叫的,有興趣的讀者請自行研究
ret 0
_main endp
_text ends
end
首先 我們
知識補充
(1)esp:棧指標暫存器(extendedstackpointer),其內存放著乙個指標,該指標永遠指向系統棧最上面乙個棧幀的棧頂。
(2)ebp:基址指標暫存器(extendedbasepointer),其內存放著乙個指標,該指標永遠指向系統棧最上面乙個棧幀的底部。
上圖為本測試例項的棧空間
細心的讀者會發現 彙編**中 add esp, 8 ;修正esp的操作
為什麼要做這部操作呢,因為在呼叫func 函式之前,main 函式中還做了兩次push 的入棧操作,將first second 兩個引數壓入棧中。呵呵可能有些讀者已經發現了,這就是所謂的 _cdecl 函式呼叫,由呼叫者清棧的操作,我們平時所用的變參的函式必須由這種方式實現,因為被調函式是無法清除到底有多少引數。還有其他的呼叫方式,如 _stdcall, _fastcall, thiscall 等。這裡給大家乙個鏈結
下面給大家乙個_stdcall的例子
#includevoid _stdcall func(int first, int second)
int main()
; 4 :
mov esp, ebp
pop ebp
ret 8
; 10 : func(first,second);
mov eax, dword ptr _second$[ebp]
push eax
mov ecx, dword ptr _first$[ebp]
push ecx
call _func@8
; 11 : return 0;
xor eax, eax
通過觀察上面的彙編**main函式在呼叫func後,沒有做平衡棧的操作,在func函式中 ret 8 這個指令做了平衡棧的操作。
本例中沒有給出讀者函式是如何返回返回值的,讀者可以自行實驗,其實如果是簡單的變數,是通過暫存器返回的,如果是陣列,結構體呢??
ps:技術拙劣,如有錯誤請指教
第六部分總結(51 54)
這一部分主要學習了jquery的節點新增 刪除 替換 複製等操作。外插 1 從後面插after insertafter 效果一樣,寫法不同 2 從前面 efore insertafter 效果一樣,寫法不同 刪除 刪除指定元素 remove detach 效果一樣,寫法不同,如li.remove i...
第六部分 屬性3
attributeusage屬性 除了用於標註常規c 型別的自定義屬性以外,還可以使用attributeusage屬性定義你使用這些屬性的方式.文件記錄的attributeusage屬性呼叫慣例如下 attributeusage validon,allowmultiple allowmultiple...
MySQL入門,第六部分,關係代數
關係代數是一種集合操作為基礎過程化查詢語言,特點 運算物件是關係,運算結果亦為關係 運算物件 關係 運算結果 關係 運算子 四類 運算子型別 運算子含義 集合運算子 並集合運算子 差 集合運算子 交 集合運算子 廣義笛卡爾積 比較運算子 大於比較運算子 大於等於 比較運算子 小於 比較運算子 小於等...