文档章节

学 Win32 汇编[4]: 使用 Debug 输出测试结果

涂孟超
 涂孟超
发布于 2014/09/26 15:36
字数 936
阅读 9
收藏 0

由于 Debug 输出是使用的标准的 Win32 窗口, 所以 include 和 includelib 的文件较多.

这样建立工程时就不需要是控制台程序了, 工程建立方法:
文件 -> 新建工程 -> 工程类型: Win32 App (no res) ...

PrintString: 输出字符串变量
; Test4_1.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    szText db 'Hello World!', 0

.code
start:
    PrintString szText  ;Hello World!
    ret
end start

 
 
 
 
 

 

 

  

PrintText: 直接输出字符串
; Test4_2.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.code
start:
    PrintText 'Hello World!'  ;Hello World!
    ret
end start

 
 
 
 
 

 

 

  

PrintStringByAddr: 根据字符串地址输出字符串
; Test4_3.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    szText db 'Hello World!', 0
    
.code
start:
    PrintStringByAddr offset szText  ;Hello World!
    
    mov eax, offset szText
    PrintStringByAddr eax            ;Hello World!
    ret
end start

 
 
 
 
 

 

 

  

PrintLine: 输出一行线
; Test4_4.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    szText db 'Hello World!', 0
    
.code
start:
    PrintLine           ;----------------------------------------
    PrintString szText  ;Hello World!
    PrintLine           ;----------------------------------------
    ret
end start

 
 
 
 
 

 

 

  

PrintDec: 输出 8-32 位的十进制整数
; Test4_5.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    v1 db 127
    v2 db -128
    v3 dw 32767
    v4 dw -32768
    v5 dd 2147483647
    v6 dd -2147483648
    
.code
start:
    PrintDec v1  ;127
    PrintDec v2  ;-128
    PrintDec v3  ;32767
    PrintDec v4  ;-32768
    PrintDec v5  ;2147483647
    PrintDec v6  ;-2147483648
    
    ;它还可以有第二个文本参数
    PrintDec v1, 'Other Text'  ;127, Other Text
    ret
end start

 
 
 
 
 

 

 

  

PrintHex: 输出 8-32 位的十进制整数
; Test4_6.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    v1 db 127
    v2 db -128
    v3 dw 32767
    v4 dw -32768
    v5 dd 2147483647
    v6 dd -2147483648
    
.code
start:
    PrintHex v1  ;7F
    PrintHex v2  ;80
    PrintHex v3  ;7FFF
    PrintHex v4  ;8000
    PrintHex v5  ;7FFFFFFF
    PrintHex v6  ;80000000
    
    ;它还可以有第二个文本参数
    PrintHex v1, 'Other Text'  ;7F, Other Text
    ret
end start

 
 
 
 
 

 

 

  

PrintDouble: 输出双精度浮点数
; Test4_7.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    v1 real8 3.14
    
.code
start:
    PrintDouble v1                ;3.14
    
    ;它还可以有第二个文本参数
    PrintDouble v1, 'Other Text'  ;3.14, Other Text
    ret
end start

 
 
 
 
 

 

 

  

Spy..StopSpy: 跟踪变量(变量必须是 8-32 位整数)
; Test4_8.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    val dd 0
    
.code
start:
    Spy val
    mov val, 2  ;2
    add val, 3  ;5
    sub val, 1  ;4
    shl val, 1  ;8
    StopSpy
    
    ret
end start

 
 
 
 
 

 

 

  

DumpMem: 查看内存
; Test4_9.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    szText db 'ABCDEFG', 0
    num    dd 13579ACEh

.code
start:
    DumpMem offset szText, 4  ;41 42 43 44
    DumpMem offset szText, 7  ;41 42 43 44 45 46 47
    
    DumpMem offset num, 4     ;CE 9A 57 13
    
    ;它也可以有个文本参数
    DumpMem offset num, 4, 'txt'
    ret
end start

 
 
 
 
 

 

 

  

DbgDump: 类似 DumpMem, 更适合查看文本
; Test4_10.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib

.data
    szText db 'ABCDEFG', 0
    num    dd 13579ACEh

.code
start:
    DbgDump offset szText, 4     ;41 42 43 44 - ABCD
    DbgDump offset szText, 7     ;41 42 43 44 45 46 47 - ABCDEFG
    
    DbgDump offset num, 4        ;CE 9A 57 13

    ;它也可以有个文本参数
    DbgDump offset num, 4, 'txt'
    ret
end start

 
 
 
 
 

 

 

  

需要注意的是 debug.inc 提供的这些宏指令都是区分大小写的.

还有更多指令可参见帮助: \RadASM\masm32\help\VKDebug.chm(帮助内容不是很全)
或直接查看 \RadASM\masm32\include\debug.inc

它还包括一个非常有用的宏 CTEXT, 这在用 invoke 调用有字符串参数的函数时非常方便.
使用 CTEXT 可以把前面那个 "最简单的 Win32 程序" 修改如下:
; Test4_11.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    debug.inc
includelib kernel32.lib
includelib debug.lib

include    user32.inc
includelib user32.lib

.code
start:
    invoke MessageBox, NULL, CTEXT("Hello World!"), CTEXT("Hi"), MB_OK
    invoke ExitProcess, NULL
end start

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2010/04/04/1704160.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
win32汇编和x64汇编?

win32汇编升到winx64汇编,转型容易吗?我指的是会win32汇编,还学x64汇编吗?我是初学,能不能直接学x64汇编语言,请推荐本书?

IIOWE
2014/10/01
840
3
为什么破解要学win32汇编?

听说破解要学win32汇编,写壳也要用win32汇编?为什么呢?不学不能学破解吗?

IIOWE
2014/10/02
2.4K
13
[Beautifulzzzz的博客目录] 快速索引点这儿O(∩_∩)O~~,红色标记的是不错的(⊙o⊙)哦~

3D相关开发 [direct-X] 1、direct-X最小框架 [OpenGL] 1、环境搭建及最小系统 [OpenGL] 2、企业版VC6.0自带的Win32-OpenGL工程浅析 51单片机 [51单片机] 1602液晶显示控制代码 [51单片机] 1...

史迪奇2号
2017/08/01
0
0
Win32汇编开发环境介绍和RadAsm简明教程

Win32汇编开发环境介绍和RadAsm简明教程 现在很多朋友都在学习汇编语言,一方面汇编语言是大学计算机课程的必修课,另一方面则是为了从其它语言转到汇编语言来,无论什么原因,我认为学习汇编...

nothingfinal
2009/08/01
0
0
会X86汇编的帮我看看为什么debug和release结果时间相差那么多

下面输出是我实现的avl树和三叉搜索树的字符串搜索性能比较结果,avl cmp times为avl树的字符比较次数,tst cmp times为三叉搜索树的字符比较次数。从结果来看release与debug都一样的比较次数...

cut
2012/11/10
471
7

没有更多内容

加载失败,请刷新页面

加载更多

开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
39分钟前
1
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
40分钟前
2
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
57分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
今天
2
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部