如何使用 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会显示当前汇编代码对应源文件代码的语句,可以快速定位。

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

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


免责声明

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

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

相关推荐
好好学习啊天天向上1 小时前
VSCODE, mermaid subgraph 示例
ide·vscode·编辑器
好好学习啊天天向上2 小时前
VSCODE, mermaid 示例
ide·vscode·编辑器
与光同尘 大道至简3 小时前
ESP32 小智 AI 机器人入门教程从原理到实现(自己云端部署)
人工智能·python·单片机·机器人·github·人机交互·visual studio
一路往蓝-Anbo5 小时前
【第42期】调试进阶(一):IDE中的Register与Memory窗口
c语言·开发语言·ide·stm32·单片机·嵌入式硬件
人工小情绪5 小时前
Antigravity简介
ide·人工智能
Yupureki8 小时前
《算法竞赛从入门到国奖》算法基础:入门篇-离散化
c语言·数据结构·c++·算法·visual studio
秋深枫叶红8 小时前
嵌入式第四十七篇——ARM汇编
汇编·arm开发·学习
Remember_9938 小时前
【JavaSE】一站式掌握Java面向对象编程:从类与对象到继承、多态、抽象与接口
java·开发语言·数据结构·ide·git·leetcode·eclipse
jh10_8 小时前
嵌入式硬件DAY5(ARM汇编)
汇编·arm开发·嵌入式硬件
千谦阙听21 小时前
双链表:比单链表更高效的增删查改
数据结构·链表·visual studio