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

学 Win32 汇编[19]: 查看二进制等相关函数

 
阅读更多

在 masm32.inc 中有这样几个函数的声明:


byt2bin_ex  PROTO :BYTE, :DWORD
wrd2bin_ex  PROTO :WORD, :DWORD
dw2bin_ex   PROTO :DWORD, :DWORD
dw2hex_ex   PROTO :DWORD, :DWORD
bin2byte_ex PROTO :DWORD


byt2bin_ex: 从 Byte 数到二进制字符串


; Test19_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
    szBin db 8 dup(0), 0  ;这是接收二进制字符串的缓冲区
    bVal  db 3
.code
main proc
    ;查看数字的二进制信息
    invoke byt2bin_ex, 2, addr szBin
    PrintString szBin ;00000010
    
    ;查看变量 bVal 的二进制信息
    invoke byt2bin_ex, bVal, addr szBin
    PrintString szBin ;00000011
    
    ;查看寄存器 al 的二进制信息
    mov al, 0feh
    invoke byt2bin_ex, al, addr szBin
    PrintString szBin ;11111110
    ret
main endp
end main


wrd2bin_ex: 从 Word 数到二进制字符串


; Test19_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

.data
    szBin db 16 dup(0), 0  ;这是接收二进制字符串的缓冲区
    wVal  dw 3
.code
main proc
    ;查看数字的二进制信息
    invoke wrd2bin_ex, 2, addr szBin
    PrintString szBin ;0000000000000010
    
    ;查看变量 wVal 的二进制信息
    invoke wrd2bin_ex, wVal, addr szBin
    PrintString szBin ;0000000000000011
    
    ;查看寄存器 ax 的二进制信息
    mov ax, 0fffeh
    invoke wrd2bin_ex, ax, addr szBin
    PrintString szBin ;1111111111111110
    ret
main endp
end main


dw2bin_ex: 从 DWord 数到二进制字符串


; Test19_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
    szBin db 32 dup(0), 0  ;这是接收二进制字符串的缓冲区
    dwVal dd 3

.code
main proc
    ;查看数字的二进制信息
    invoke dw2bin_ex, 2, addr szBin
    PrintString szBin ;00000000000000000000000000000010
    
    ;查看变量 dwVal 的二进制信息
    invoke dw2bin_ex, dwVal, addr szBin
    PrintString szBin ;00000000000000000000000000000011
    
    ;查看寄存器 eax 的二进制信息
    mov eax, 0fffffffeh
    invoke dw2bin_ex, eax, addr szBin
    PrintString szBin ;11111111111111111111111111111110
    ret
main endp
end main


dw2hex_ex: 从 DWord 数到十六进制字符串


; Test19_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
    szHex db 8 dup(0), 0  ;这是接收十六进制字符串的缓冲区
    dwVal dd 255
.code
main proc
    ;查看数字的十六进制信息
    invoke dw2hex_ex, 16, addr szHex
    PrintString szHex ;00000010
    
    ;查看变量 dwVal 的十六进制信息
    invoke dw2hex_ex, dwVal, addr szHex
    PrintString szHex ;000000FF
    
    ;查看寄存器 eax 的十六进制信息
    mov eax, 2694881440
    invoke dw2hex_ex, eax, addr szHex
    PrintString szHex ;A0A0A0A0
    ret
main endp
end main


bin2byte_ex: 从字符串(必须有 8 个 '0' 或 '1' 组成)到字节


; Test19_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
    szTxt1 db '00000010', 0
    szTxt2 db '01111011', 0
    szTxt3 db '11111111', 0
.code
main proc
    invoke bin2byte_ex, addr szTxt1
    PrintDec eax  ;2
    
    invoke bin2byte_ex, addr szTxt2
    PrintDec eax  ;123
    
    invoke bin2byte_ex, addr szTxt3
    PrintDec eax  ;255
    ret
main endp
end main


学习查看二进制是为了看到 EFLAGS 中的二进制位的变化:


; Test19_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
    szBin db 8 dup(?), 0
.code
main proc
    lahf  ;LAHF 指令是把 EFLAGS 寄存器的低字节读入 AH
    invoke byt2bin_ex, ah, addr szBin
    PrintString szBin  ;01000110
    ret
main endp
end main
分享到:
评论

相关推荐

    滴水三期完整版(96课时)

    第72讲:2015-04-29(Win32 PE查看器-项目要求) 项目一:PE查看器 开发周期(5天) 需求文档 第73讲:2015-05-07(Win32 创建线程) 第74讲:2015-05-08(Win32 线程控制_CONTEXT) 第75讲:2015-05-11(Win32 临界区) ...

    汇编语言编程的40个基本实践

    20. **阅读和分析反汇编代码**:当你遇到二进制代码时,能够理解反汇编输出有助于问题排查。 21. **数据类型和转换**:理解不同数据类型的表示和转换,如字节、字、双字等。 22. **位操作**:学会使用AND、OR、NOT...

    Reversing:逆向工程揭密

    第二类是从没有源代码的程序出发,生成对应的源程序、系统结构以及相关设计原理和算法思想的文档等,亦即本书重点讨论的二进制逆向工程。 本书共有13章和三个附录,涵盖了逆向工程的基础知识、应用、开发和拓展的...

    delphi 开发经验技巧宝典源码

    0113 如何将二进制转换为十六进制 76 0114 如何将十进制转换为二进制 77 0115 如何将十进制转换为十六进制 78 0116 如何将十六进制转换为十进制 79 4.5 类型转换函数 80 0117 使用IntToHex函数将整数转换...

    delphi 开发经验技巧宝典源码06

    0113 如何将二进制转换为十六进制 76 0114 如何将十进制转换为二进制 77 0115 如何将十进制转换为十六进制 78 0116 如何将十六进制转换为十进制 79 4.5 类型转换函数 80 0117 使用IntToHex函数将整数转换...

    Delphi5开发人员指南

    3.3.2 Win32系统是怎样管理内存的 76 3.4 Win32的错误处理 78 3.5 总结 78 第4章 应用程序框架和设计 79 4.1 理解Delphi环境和项目的体系结构 79 4.2 构成Delphi 5项目的文件 79 4.2.1 项目文件 80 4.2.2 单元文件 ...

    vc++ 开发实例源码包

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    C#微软培训资料

    10.3 构造函数和析构函数 .119 10.4 小 结 .122 第十一章 方 法 .124 11.1 方法的声明.124 11.2 方法中的参数.125 11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 ...

Global site tag (gtag.js) - Google Analytics