(汇编语言)实验二 Windbg调试程序的应用

一. 实验目的

1)进一步掌握windbg调试器的使用方法;
2)通过windbg观察不同寻址方式的结果;
3)学习编写简单汇编程序。

二. 实验内容

编译eg0002.asm
Windbg调试
设置windbg调试环境

三. 实验过程和程序

程序代码:

;eg0002.asm
include io32.inc

;定义数据段
.data
bvar   byte 12h  ;定义字节类型数据

array  word 0Ah,0Bh,0Ch,0Dh,0Eh,0AAH,0BBH,0CCH,0DDh,0EEh ;定义字类型数组
arr_size = $-array               ;计算数组大小,以字节为单位
arr_len	 = arr_size/2            ;计算以字为单位的数组大小

wvar   word 5678h                ;定义字类型数据

dwvar  dword 12345678h           ;定义双字类型数据

i      dword 0                   ;定义变量i,赋初值0

;定义代码段
.code
start:
    mov ax , 0ABCDh             ;单字立即数寻址
    mov ebx, 0ABCDh             ;双字立即数寻址
    
    mov ax , array              ;直接寻址
    mov ebx, dword ptr array+1  ;寻址类型不匹配时使用 dword ptr强制转换
    
    mov al , type bvar          ;计算类型占用的字节数,byte类型占1个字节
    mov al , type wvar          ;word类型占2个字节
    
    mov eax, lengthof array     ;计算数组长度,以类型为单位
    mov edi, sizeof array       ;计算数组长度,以字节为单位
    mov ebp, arr_size           ;这一组实际上都是立即数,因为是在编译时就计算出来的常数值
    
    lea eax, array              ;取数组地址
    mov ebx, i                  ;取i的值
p_next:
    mov cx , [eax+ebx*2]        ;读入array中的第i个数据到cx,因为array是word类型,所以乘以2
    call disprw
    cmp ebx, lengthof array     ;比较i的值与数组长度
    je p_end;
    inc ebx                     ;i=i+1
    jmp p_next                  ;循环取下一个数  
    
p_end:
    exit 0
    
	end start  ;指定入口点


四. 实验结果和分析

启动编译环境win32.bat
输入命令:(1)make32 eg0002 (2)eg0002
结果如下:
在这里插入图片描述
设置windbg调试环境:
设置好3个路径,eg0201.*等文件所在的目录
在这里插入图片描述
其它两个路径和这个一样

打开程序和源文件:
在这里插入图片描述
加载程序和源码后,在windbg中输入命令:
(1).reload/f (2)lm
结果如下:
在这里插入图片描述
输入命令:
g @$exentry
程序将直接运行,并在程序入口点停止,结果如下:
在这里插入图片描述
输入单步执行命令:P
结果如下:
在这里插入图片描述
输入查看变量信息命令:
dt eg0002!*
结果如下:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值