`
zzc1684
  • 浏览: 1235189 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

由于 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
分享到:
评论

相关推荐

    WIN7 32位 MASM汇编工具包含edit,debug,link等(新上传)

    4. **DEBUG**:调试器,用于分析和测试汇编代码。它可以查看内存内容、设置断点、单步执行程序,帮助开发者定位和修复错误。 **环境搭建与学习指南** 安装并配置这些工具在Win7 32位系统上可能需要一些步骤,例如...

    masm link debug dosbox

    标题“masm link debug dosbox”涉及到的是在Windows 10环境下使用MASM汇编语言、LINK链接器以及DOSBox模拟器进行程序开发和调试的知识点。这是一套适用于学习微机原理或者低级编程的工具组合。下面将详细阐述这些...

    单片机仿真软件DBG8051

    4. **模拟I/O**:模拟各种输入/输出设备,如LED、按钮、串口通信等,使开发者能够在仿真环境中实现完整的系统功能。 5. **中断系统模拟**:仿真中断发生和处理过程,有助于测试中断驱动的程序逻辑。 6. **波形显示...

    WINDWOS系统 VS 编译OPENSSL1.1.1N

    **通过Perl配置编译选项**:使用`perl Configure VC-WIN32 [no-shared] [no-asm] [no-tests] [--debug] --prefix=输出路径`命令来配置编译选项。其中: - `[no-shared]`:该选项用于指定是否编译静态库。如果不...

    Qt mingw release版异常结束 crash信息捕捉和跟踪(含测试代码)

    程序在debug可以正常运行,但是在release版后异常结束,系统又没有提供任何信息情况下,或者程序发布后在客户手中出现异常崩溃,但自己测试又不能复现问题,要是能捕获到异常时相关信息就很好定位问题了。...

    Delphi5开发人员指南

    4.5 定义公共体系结构:使用对象库 93 4.5.1 考虑应用程序的体系结构 93 4.5.2 Delphi固有的体系结构 94 4.5.3 体系结构的例子 94 4.5.4 子窗体TChildForm 94 4.5.5 数据库基础模式窗体TDBMode- Form 96 4.5.6 ...

    编程高手箴言

    熟练掌握Win32 API,可以编写出高效且功能强大的应用程序。此外,Windows上的编程语言选择多样,如C++、C#、Visual Basic等,每种语言都有其特性和优势,需要根据项目需求来选择合适的工具。 "编程高手箴言"可能...

    ffpeg库在msvc下的编译方法

    1. **Yasm**:这是一个x86汇编语言的编译器,FFmpeg使用它来编译某些特定的代码。`yasm-1.2.0-win32.exe`就是Yasm的安装程序,你需要安装它以便进行FFmpeg的编译工作。 2. **MinGW**:由于FFmpeg的一些依赖项需要...

    【软件加密_技术内幕】

    [Trial version] 第3章 Win32 调试API [Trial version] 病毒是如何抗动态测试.htm [Trial version] 3.1 Win32调试API原理 [Trial version] Win32调试API第一部分.htm [Trial version] Win32调试API第二部分.htm...

    命令行操作与指令认识.ppt

    输入`DEBUG`命令后,可以使用各种调试命令,如`A`(汇编),`C`(比较),`D`(转储),`E`(进入),`F`(填充),`G`(执行),`H`(转换十六进制数),`I`(输入),`L`(加载),`M`(移动),`N`(命名),`O`...

    WonderWall Plus支持库,支持全局变量的内联汇编-易语言

    )但是需要配合我扩展的WonderWall+黑月来编译。以前都是自己私下用未公开,现在用易越来越少了,现在放出来也算对易做...支持win10,黑月+WonderWall Plus 组合没有问题,其他插件未测试。 放几张以前代码中的使用图片

    C#微软培训资料

    第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 编程语言 程语言编程语言 程语言 C#.4 1.1 Microsoft.NET——一场新的革命.4 1.2 .NET 与 C#.6 1.3 C#语言的特点.8 1.4 小 结 .11...

Global site tag (gtag.js) - Google Analytics