VS2010查看源碼對應的彙編語言

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

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

若是咱們想要查看源碼所對應的彙編語言,應該怎麼操做呢?windows

 

1.ubuntu系統g++sass

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 進入下面的狀態ui

step 3:查看完後自動退出,gdb模式下鍵入q退出調試。spa

 

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

EIP:寄存器存放下一個CPU指令存放的內存地址,當CPU執行完成當前的指令後,從EIP寄存器中讀取下一條指令的內存地址,而後繼續執行;

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開頭。

相關文章
相關標籤/搜索