反汇编基础-MSVC2012,2008,MinGw中控制台main函数入口特征
目錄
?
?
理論
MSVC2012
MSVC2008
MinGW
?
理論
斷點(diǎn)的作用:當(dāng)程序運(yùn)行到斷點(diǎn)處就會(huì)暫停,并將程序接下來(lái)的處理權(quán)交給這個(gè)程序的調(diào)試器,調(diào)試器就擁有了被調(diào)試程序中獲取相關(guān)信息的權(quán)利,在某些反編譯軟件中以調(diào)試模式啟動(dòng)的程序會(huì)在ntdll模塊中默認(rèn)被設(shè)置一個(gè)系統(tǒng)斷點(diǎn);這個(gè)斷點(diǎn)是為了讓調(diào)試器能夠正常獲得被調(diào)試子程序的調(diào)試信息;
?
程序的運(yùn)行是分領(lǐng)空的。
領(lǐng)空:當(dāng)前運(yùn)行的指令是屬于哪個(gè)模塊的;
在反匯編中會(huì)將領(lǐng)空分為兩種,系統(tǒng)領(lǐng)空和程序領(lǐng)空;
系統(tǒng)領(lǐng)空中的指令都為操作系統(tǒng)指令;
?
所有的系統(tǒng)DLL都在系統(tǒng)領(lǐng)空中
斷點(diǎn):系統(tǒng)斷點(diǎn)
?
每種編譯器有每種編譯器的風(fēng)格,不同的編譯器編譯出來(lái)的程序代碼可能不能,但它的系統(tǒng)代碼是相同的。
這里提供2個(gè)類(lèi)別的源碼:
源碼A:
#include <iostream> using namespace std;int main(int *argc, int *argv[]){return 0; }源碼B:
#include <iostream> using namespace std;int main(){return 0; }?
MSVC2012
源碼A的Debug
可見(jiàn)其特征為mov xxx,然后在push,這里其實(shí)和Release差不多,其實(shí)直接push就闊以了!
源碼A的Release:
可見(jiàn)MSVC2012中Debug版中進(jìn)入main函數(shù)的特征為一堆的push。
?
源碼B的Debug
這里可以知道源碼和源碼A一樣
下面來(lái)看看Realase版本的:
可見(jiàn)和源碼A的Realase一樣
?
MSVC2008
源碼A的Debug版:
可見(jiàn)和MSVC2012的一樣;
源碼A的Realase版:
可見(jiàn)還是與MSVC2012一樣;
源碼B和MSVC2012一樣,在此不再截圖
?
MinGW
源碼A的Debug版本:
可見(jiàn)這里是一堆的move指令;
源碼A的Debug版:
不能調(diào)試,嘿嘿,有機(jī)會(huì)再寫(xiě)一篇博文吧!
?
源碼B的Realase版本和A一樣!
總結(jié)
以上是生活随笔為你收集整理的反汇编基础-MSVC2012,2008,MinGw中控制台main函数入口特征的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL工作笔记-使用事件和存储过程定
- 下一篇: QML笔记-整合C++及单例模式管理QM