VS2010查看源码对应的汇编语言

在学习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

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

原文地址:https://www.cnblogs.com/phillee/p/10686815.html

时间: 2024-10-12 21:35:18

VS2010查看源码对应的汇编语言的相关文章

通过查看源码,查看invalidate和postInvalidate的区别

查View的源码可知: postInvalidate是使用handler发送消息,即可以使用在非UI线程中,而invalidate直接修改布局,所以只能用在UI线程里了. public void invalidate() { invalidate(true); } void invalidate(boolean invalidateCache) { if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.Hierarchy

APPK反编译 dex文件查看源码

00x01 工具准备 Android逆向助手_v2.2 jd-gui apk 7z-zip 00x02 详细步骤 a. 从应用宝官网下载apk,这里我下载了借贷宝: b. 使用 7z-zip提取客户端apk文件,也可先把客户端apk文件后缀名改为 .zip后解压: c. 使用Android逆向助手_v2.2 lib目录下的 dex2jar.bat工具对客户端apk中的 classes.dex文件进行反编译,具体操作如下图: d. 反编译得到的 .jar文件使用Android逆向助手_v2.2 l

开源jar包导入并查看源码

我们用Ctrl + 左键查看源码的时候往往出现以下情况,是因为没有正确的导入jar包,以及没有导入src包 1.右键项目-->build ptah-->config build path下面是解决方法(从导入jar包开始): 2.add Libary-->User Library ,点击User Library那个按钮,然后新建一个库. 3.点击User Library那个按钮,名字由你自己取.然后点击OK 再然后选择你信创建的库,点击finish. 4.然后往库里导jar包 add l

java_eclipse 反编译插件查看源码 的设置操作

1. 需要导入3个文件:net.sf.jadclipse_3.3.0.jar , jadclipse_3.3.0.jar ,jad.exe 2.改写目录,设置目录 jad.exe  存放入jdk 的bin目录下: net.sf.jadclipse_3.3.0.jar , jadclipse_3.3.0.jar , 存放入eclipse 的plug-in 目录下: 3. 改写默认的class viewer. 4. 重启浏览器. 已经可以看见底层代码了. java_eclipse 反编译插件查看源码

hadoop学习;hdfs操作;运行抛出权限异常: Permission denied;api查看源码方法;源码不停的向里循环;抽象类通过debug查找源码

eclipse快捷键alt+shift+m将选中的代码封装成方法:alt+shift+l将选中的代码添加对应类型放回参数 当调用一个陌生方法时,进入源码不停的向里循环,当找不到return类似方法的时候,可以看到最原始的方法 package com.kane.hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org

Ubuntu下使用sublime text 3安装插件Package Control+cTags+Cscope后查看源码利器

1.安装Package Control : http://jingyan.baidu.com/article/d3b74d64a302631f77e609fa.html 2.安装cTags插件: http://jingyan.baidu.com/article/656db9189c9761e381249cf5.html 3.安装Cscope插件 1. 通过 Preference -> Package Control -> Install Package安装Cscope插件 2. 安装Cscop

apk反编译查看源码

1.将apk解压 ,解压后为 2.得到其中的classes.dex文件,下载软件dex2jar,把classes.dex文件拷贝到该软件下 3.运行d2j-dex2jar.bat classes.dex,得到了此文件 4.下载jd-gui工具,打开查看源码 查看代码是否进行了混淆,是否包括了显而易见的敏感信息,如果没有混淆,软件非常不安全

Android记录17-sdk更新、Eclipse下查看源码、chm文档提供等干货

Android记录17-sdk更新.Eclipse下查看源码.chm文档提供等干货 本篇博客分享一些Android开发者提高开发效率的一些干货,之从Google被和谐了之后,Android开发者可谓痛不欲生,只能通过翻墙的方式去查看官网,sdk更新不了,无法下载源码等问题就出现了,作为一位有追求的Android开发者,不可能只满足于使用sdk这种初级技能了,提高开发效率和代码质量是每位开发者应该去追求的,下面小巫整理总结了一些解决方案供各位参考,让Android开发变得高大上一些. sdk更新

HTTP协议(3)浏览器的使用之查看源码

在做CTF的Web类题目时,推荐使用Firefox浏览器.下面介绍一些在解题过程中关于浏览器的常用技巧.首先就是查看源码.在做Web题目时,经常需要查看网站源码,有的flag直接就藏在源码中,有些题目则是在源码中给出提示和线索,所以查看源码通常是做Web题的第一步.例题1:BugKu Web2 打开题目之后,查看源码,flag直接就放在源码中.有些题目特意做了限制,禁止通过右击的方式查看源码,其实在正常能够查看源码的页面地址栏中,可以看到查看源码时自动在网址前面加上了view-source:,因