VS2010檢視原始碼對應的組合語言

2022-02-25 03:40:49 字數 3170 閱讀 5938

在學習c++中const關鍵字的過程中,經常會看到各種暫存器、彙編指令分析,像下面的圖這樣

左圖是g++中反彙編的效果,右圖是vs中反彙編的效果。

如果我們想要檢視原始碼所對應的組合語言,應該怎麼操作呢?

1.ubuntu系統g++

g++中一般使用gdb進行除錯。

.

├── build

├── cmakelists.txt

├── include

│   └── cmakelists.txt

└── src

└── consttest.

cc

我的工程檔案下檔案結構如上所示,進行 cmake .. && make

之後 build 資料夾下

build

├── cmakecache.txt

├── cmakefiles

│   ├──

3.5.1

│   │   ├── cmakeccompiler.cmake

│   │   ├── cmakecxxcompiler.cmake

│   │   ├── cmakedeterminecompilerabi_c.bin

│   │   ├── cmakedeterminecompilerabi_cxx.bin

│   │   ├── cmakesystem.cmake

│   │   ├── compileridc

│   │   │   ├── a.out

│   │   │   └── cmakeccompilerid.c

│   │   └── compileridcxx

│   │   ├── a.out

│   │   └── cmakecxxcompilerid.

cpp│   ├── cmake.check_cache

│   ├── cmakedirectoryinformation.cmake

│   ├── cmakeoutput.log

│   ├── cmaketmp

│   ├── consttest.

dir│   │   ├── build.

make

│   │   ├── cmake_clean.cmake

│   │   ├── cxx.includecache

│   │   ├── dependinfo.cmake

│   │   ├── depend.internal

│   │   ├── depend.

make

│   │   ├── flags.

make

│   │   ├── link.txt

│   │   ├── progress.

make

│   │   └── src

│   │   └── consttest.

cc.o

│   ├── feature_tests.bin

│   ├── feature_tests.c

│   ├── feature_tests.cxx

│   ├── makefile2

│   ├── makefile.cmake

│   ├── progress.marks

│   └── targetdirectories.txt

├── cmake_install.cmake

├── consttest

└── makefile

step 1:產生我們的可執行檔案 consttest 後,在 build 路徑下輸入 gdb consttest 會進入到 gdb 除錯模式

step 2:然後再輸入 disassemble consttest 進入下面的狀態

step 3:檢視完後自動退出,gdb模式下鍵入q退出除錯。

2.windows 7系統vs2010

step 1:在main函式的某個位置設定乙個斷點

step 2:選單欄中除錯-->啟動除錯,或者直接使用快捷鍵f5

step 3:在上一步之後程式應該執行到斷點所在行,此時除錯-->視窗-->反彙編就能進入到反彙編狀態

3. 組合語言基本術語

esp(extended stack pointer): 堆疊指標,暫存器存放當前執行緒的棧頂指標;    例如用ebp儲存當前棧指標: move ebp, esp

ebp(extended base pointer): 基址指標,暫存器存放當前執行緒的棧底指標;   例如將基址指標壓入棧: push ebp

eax: 累加器(accumulator),加法乘法指令的預設暫存器;

ebx: 基位址(base)暫存器,在記憶體定址時存放基位址;

ecx:計數器(counter),是重複(rep)字首指令和loop指令的內定計數器;

edx:存放整數除法產生的餘數;

esi/edi: 源/目標索引暫存器(source/destination index), 在很多字串操作指令中,ds:esi指向源串,而es:edi指向目標串。

開頭字母好像跟cpu架構有關,x86是32位系統以e開頭,x86-64是64位系統以r開頭。

串列埠學習筆記原始碼 VS2010

serialdlg.cpp 實現檔案 include stdafx.h include serial.h include serialdlg.h include afxdialogex.h include io.h include windows.h ifdef debug define new d...

使用VS2010編譯OpenSSL原始碼

2,安裝visual studio 2010 確認選中 x64編譯器和工具 3,安裝activeperl 5,拷貝nsam.exe和ndisam.exe至d program files x86 microsoft visual studio 10.0 vc bin 目錄 6,開啟visual stu...

VS2013原始碼轉換VS2010的解決方法

近日有朋友得到vs2013的原始碼,但是他電腦又沒有安裝vs2013,也不想用vs2013,因為他用慣了vs2010。哪關鍵是怎樣用vs2010開啟vs2013的原始碼呢?一 用記事本開啟解決方案檔案如 bluethink.addressbook.sln 見前面幾行 microsoft visual...