詳細執行流程:
(1)啟動函式
檢索命令列指標
-》初始化全域性變數,堆疊等。
(2)進入
winmain()
:call 00401000
根據不同的呼叫約定執行不同的壓棧順序。
_stdcallwinapi,
壓棧順序為從右向左,由系統自動執行棧的**。
_cdeclc
呼叫約定
壓棧順序為從右向左,由呼叫者執行棧**。
pascal
壓棧順序為從左向右,由系統自動執行棧**。這裡系統為被呼叫
_fastcall
暫存器thiscall
物件導向特有的
this
指標,同
winapi,c
呼叫約定,只是需要暫存器儲存
this
指標堆疊形成順序
區域性變數
返回位址
函式引數
同時應注意名字改編問題:由呼叫約定
+編譯器共同決定。(3
)載入動態鏈結庫
載入靜態鏈結庫,將函式全部以二進位制形式載入到指定位置。(lib)
靜態載入動態連線庫,
一次性載入所有要用的dll。(lib,#import)
動態載入動態連線庫,需要的時候載入制定函式。(def)
參考文獻:加密解密(第三版)
程式執行過程
要理解乙個程式的執行過程,首先要理解什麼是編譯器。我們用c語言寫的程式,計算機只能識別機器語言 二進位制指令 計算機並不能理解。因此,必須 將c語言轉換為機器語言。編譯器就是用來實現這一功能的。編譯器將源 檔案按照一定的對應規則映射程計算機能夠識別的二進位制指令 關於原始檔 目標檔案和可執行檔案 原...
程式執行過程
程式的執行過程大致分為以下四的步驟 1 預處理 2 編譯 3 彙編 4 鏈結 1.關於預處理 預處理階段的工作基本上是對源程式做 替代 主要有 巨集替換 條件編譯 標頭檔案展開 去除注釋 經過這番替換之後,就會生成乙個沒有巨集定義,沒有條件編譯 沒有特殊符號的輸出檔案。2.關於編譯 編譯階段的工作就...
程式執行過程
程式執行過程 不同作業系統可執行檔案的格式不同 linux elf execuatable and linkable file format windows pe portable executable format 這也是為什麼乙個程式無法同時在linux和windows下執行 這裡舉例elf檔案...