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开头。

相关文章
相关标签/搜索