debug版函式初始化入口 0xcc

2021-06-06 22:05:14 字數 879 閱讀 5643

在vc++編寫的程式程式設計成debug版,反彙編**,函式入口處經常看到如下一段**:

00ea14e0 55                push        ebp  

00ea14e1 8b ec             mov         ebp,esp

00ea14e3 81 ec c0 00 00 00 sub         esp,0c0h

00ea14e9 53                push        ebx  

00ea14ea 56                push        esi  

00ea14eb 57                push        edi  

00ea14ec 8d bd 40 ff ff ff lea         edi,[ebp-0c0h]

00ea14f2 b9 30 00 00 00    mov         ecx,30h

00ea14f7 b8 cc cc cc cc    mov         eax,0cccccccch

00ea14fc f3 ab             rep stos    dword ptr es:[edi]

其中主要分為3部分,最上面3行完成本函式區域性變數棧空間的開闢,中間部分儲存需要保護的暫存器(這部分並非必須),最後4行完成棧空間所有位元組初始化為0xcc。

0xcc對應彙編** int 3,即軟中斷。

一方面,0xcc可以為某些檢查提供標記(

_rtc_checkstackvars

);另一方面,在棧操作錯誤或除錯彙編**(如使用od除錯shellcode)時可以對感興趣的邏輯進行細緻的分析,這通常可以通過加入

__asm ;

來加入斷點。

建構函式初始化列表和初始化函式

其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...

順序佇列初始化 入隊 出佇列 判斷隊空

include include include define maxsize 100 using namespace std 順序佇列的型別 struct sequeue 順序佇列的常用形式就是迴圈佇列,迴圈佇列的基本運算 void initqueue struct sequeue q 入佇列演算法...

Git的安裝與初始化入門篇 一

分布式專案版本管理工具,效果遠超svn,誰用誰知道?安裝 windows git的安裝通常是按照正常順序執行安裝即可,沒什麼複雜的?基礎配置 linux下的最重要的安裝依賴的問題?安裝git?tar zxvf git的gz包 編譯?make prefix user local all git ver...