教程 逆向反彙編第三課

2021-09-30 08:28:17 字數 916 閱讀 8041

說完利用堆疊傳遞引數了,下面該說說使用暫存器傳遞引數的話題了.暫存器傳遞傳輸的方式並沒有乙個標準,所有與平台相關的方法都是由ide(也就是編譯器)開發人員制定的.儘管沒有統一的標準,但絕大多數編譯器提供商都在不對相容性宣告的情況下,遵循相應的規範,吉fastcall規範._fastcall顧名思義,特點就是快,因為他是靠暫存器來傳遞引數的.

不同編譯器實現的fastcall稍有不同,如microsoft visual c++編譯器採用fastcall規範傳遞引數時,最左邊的兩個不大於4個位元組(dword)的引數分別放在ecx和edx暫存器.當暫存器用完後,就要使用堆疊,其餘引數仍然按照從右到左的順序壓入堆疊,被呼叫的函式在返回前清理傳送引數的堆疊.浮點值員指標和int64型別總是通過對戰來傳遞的.而borland delphi/c++編譯器總是通過將暫存器來傳遞引數的,其最左邊的三個不大於4個位元組(dword)的引數分別放在eax  edx  和 ecx暫存器,暫存器用完後,引數按照從左到右的pascal方式來壓棧.另外一款編譯器watcom c總是通過暫存器來傳遞引數的,嚴格為每乙個引數分配乙個暫存器,預設時第乙個引數用eax,第二個引數用edx,第三個引數用ebx,第四個引數用 ecx,如果暫存器用完了,就會用堆疊來傳遞引數.watcom c可以由程式設計師指定任意乙個暫存器傳遞引數,因此,其引數實際上可能通過任何暫存器進行傳遞.

來看乙個手動指定fastcall呼叫引數的例項:

c原始碼如下:

這個反彙編後的**

另乙個呼叫規範thiscall也用到了暫存器傳遞引數.thiscall是c++中的非靜態類成員函式的預設呼叫約定,物件的每個函式隱含接受this 引數.採用thiscall約定時,函式引數按照從右到左的順序入棧,被呼叫的函式在返回前清理傳送引數的棧,只是另外通過暫存器ecx傳送乙個額外的引數:this指標.

定義乙個類,並在類中定義乙個成員函式:

我就不過多分析了,和前面差不多.

教程 逆向反彙編第三課

說完利用堆疊傳遞引數了,下面該說說使用暫存器傳遞引數的話題了.暫存器傳遞傳輸的方式並沒有乙個標準,所有與平台相關的方法都是由ide 也就是編譯器 開發人員制定的.儘管沒有統一的標準,但絕大多數編譯器提供商都在不對相容性宣告的情況下,遵循相應的規範,吉fastcall規範.fastcall顧名思義,特...

python第三課答案 python第三課

字串操作 s alexwusir s1 s.capitalize 首字母大寫 print s1 全大寫,全小寫 s2 s.upper s21 s.lower print s2,s21 大小寫翻轉 s3 s.swapcase print s3 每個隔開 特殊字元或數字 的單詞首字母大寫 s alex ...

python第三課答案 python第三課筆記

以下哪個變數的命名不正確?為什麼?a mm 520 b mm520 c 520 mm d 520 mm 答 c不正確,不能數字開頭 在不上機的情況下,以下 你能猜到螢幕會列印什麼內容嗎?myteacher 小甲魚 yourteacher myteacher yourteacher 黑夜 print ...