C 筆記 二級指標在反彙編中的形式

2021-10-01 20:03:32 字數 1163 閱讀 9687

下面的程式都是x86程式。32位的程式

如下**:

#include using namespace std;

void test()

int main(int argc, int *ar**)

先看下debug版的反彙編:

上面是main函式的,看看test()函式

從中可以看到還是**還是比較多的,主要是看release版本。debug版本稍微過一下。

32位機器編譯出來程式函式前都是

push ebp

mov ebp, esp

進入函式時要儲存ebp的值。進入函式後存esp的值。方便進行堆疊內的定址,函式返回要恢復ebp的值。

從上面可以看到呼叫函式一般就是使用call。

lea eax, [p]

mov dword ptr [pp], eax

lea為資料傳輸指令,[p]為p位址內的值(因為是指標,這個值也是位址)給eax。

然後使用mov指令把eax裡面放的這個位址,以位址的形式放到pp中。

下面是release版本的反彙編:

從這裡可以看到test()函式被優化了,並且整個程式都變成十分簡潔。release版本還是比較6。

這裡可以看到**pp被優化了,在反彙編中可以看到,他僅僅是操作了指標p。

這裡空間沒釋放,在此補下**:

#include using namespace std;

void test()

int main(int argc, int *ar**)

BeaEngine反彙編引擎在C中的使用

beaengine是乙個開源的反編譯引擎,官網為 支援多種語言,比如 python vc masm32 delphi 等。由於我在使用的時候遇到了很多問題,所以在這裡介紹一下它在vs中的具體應用及問題解決方法。beaengine的所有 布局安排同這個示例 在cpp檔案中貼上examples中的示例 ...

程式設計 C語言的二級指標

用c語言指標作為函式返回值 c語言允許函式的返回值是乙個指標 位址 我們將這樣的函式稱為指標函式 函式執行結束後會銷毀在它內部定義的所有區域性資料 include include char strlong char d,char e else intmain c語言二級指標 指向指標的指標 指標可以...

程式設計 C語言的二級指標

用c語言指標作為函式返回值 c語言允許函式的返回值是乙個指標 位址 我們將這樣的函式稱為指標函式 函式執行結束後會銷毀在它內部定義的所有區域性資料 include include char strlong char d,char e else intmain c語言二級指標 指向指標的指標 指標可以...