如何使用 Visual Studio 代替 OllyDbg 完成汇编语言实验

目录-点击可快捷跳转至对应章节


前言

在学校布置的研究汇编语言的作业中,老师提供的工具软件是OllyDbg,对于大部分同学而言,学习一个新软件的成本过高,并且OllyDbg的界面在现代也过于古老了,因此尝试寻找其它软件进行代替。
对于大部分学习C/C++的同学而言,使用Visual Studio无疑是成本最低的方式,而AI也证明了可行

VS2022完全可以替代OllyDbg完成本实验所有要求,且在有源码的情况下更高效、直观。只需禁用优化并打开反汇编窗口,就能完整观察到栈帧建立、参数传递、寄存器变化等所有机器级细节。
建议教学时采用VS2022,降低工具学习成本,让学生更专注于理解机器级表示的本质。


使用 Visual Studio 完成实验教程

软件下载

官网下载网址:Visual Studio 官网

下载Visual Studio 2019/2022版本均可,选择Community(社区版)。
本教程使用Visual Studio 2022 Community进行演示


新建项目

安装好软件后启动软件,选择创建新项目->空项目->输入项目信息,即可完成项目创建。
Visual Studio 2022对中文的适配较好,可使用中文项目名/文件名,但是在实际生产开发中不推荐



编写源文件

创建.c源文件

使用快捷键Ctrl + Shift + A,修改文件后缀为.c,并写入代码。

c 复制代码
#include<stdio.h>
int add(int x, int y)
{
    return x + y;
}
int main()
{
    int temp1 = 125;
    int temp2 = 80;
    int sum = add(temp1, temp2);
    return sum;
}



项目配置修改

1.使用 Debugx86 环境

此处使用x86,则以32位 执行程序;

此处使用x64,则以64位执行程序;

2.禁用优化

解决方案资源管理器右键项目名称 ,在菜单栏底部点击属性

配置属性->C/C++->优化中找到优化,右侧下拉菜单选择禁用(/Od)

必须设置/Od,否则编译器可能:

  • 内联add函数
  • 省略帧指针(EBP)
  • 直接使用寄存器传参(不压栈)

3.生成调试信息

配置属性链接器调试 → 生成调试信息为"是"

4.调试信息格式

配置属性C/C++常规调试信息格式为"程序数据库(/Zi)"

完成配置后点击应用->确定即可关闭界面。


打开调试窗口

完成上面的设置后,使用快捷键F10进入VS的逐步调试功能。

可以看到界面变成这样:

此时点击顶部的调试窗口,并打开寄存器反汇编调用堆栈内存局部变量等调试信息窗口

拖动不同的窗口界面,直至看起来舒服为止


开始实验

由于在vs中直接点F10会直接跳转到下一行代码,因此我们需要在反汇编窗口中打上一个断点(快捷键F9)

此时按F10,每按一次,就会执行一行汇编代码。

与此同时,在寄存器窗口中也可以参看当前寄存器状态
其中,标红表示该数据在上一句执行中发生了数值变化

此时,我们就可以根据老师给出的实验要求,一步步地执行对应汇编代码,观察实验现象、记录实验数据!


其它注意事项

在老师给出的实验流程描述中的部分语句,在vs2022中有不同的显示,例如:

其中mov dword ptr ss:[ebp-4],7D这行代码在vs2022的反汇编窗口中有可能 是这样显示:

但是完全不用担心,因为vs2022会显示当前汇编代码对应源文件代码的语句,可以快速定位。

如果想要解决这个问题,可以根据以下步骤进行

反汇编窗口中,点击查看选项取消 勾选显示符号名,即可发现原本的变量名改为了寄存器名称


免责声明

本文仅用于交流软件使用方法与技巧,如果课程明确要求使用指定工具,请按照课程要求进行完成!
作者不对因使用本文教程导致的任何直接或间接后果负责!

文中如有不足之处,欢迎评论区补充交流!

相关推荐
骥龙17 小时前
第六篇:AI平台篇 - 从Jupyter Notebook到生产级模型服务
ide·人工智能·jupyter
kun2003102918 小时前
如何用Obsidian+VSCode生成文案排版并发布到公众号
ide·vscode·编辑器
JQLvopkk1 天前
C# 实践AI :Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
踏过山河,踏过海1 天前
【qt-查看对应的依赖的一种方法】
qt·visual studio
开源技术1 天前
Python GeoPandas基础知识:地图、投影和空间连接
开发语言·ide·python
浩浩测试一下1 天前
内网---> WriteOwner权限滥用
网络·汇编·windows·安全·microsoft·系统安全
承渊政道1 天前
C++学习之旅【C++中模板进阶内容介绍】
c语言·c++·笔记·学习·visual studio
一品人家1 天前
win32汇编使用GDI+入门教程之九
汇编·windows·win32汇编
寻梦csdn2 天前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
电饭叔2 天前
Jupyter学习中的问题--FileNotFoundError
ide·学习·jupyter