学 Win32 汇编[10]: TYPE、$、LENGTHOF、SIZEOF、TYPEDEF
TYPE: 获取类型大小, 对数组是获取每个元素的大小
; Test10_1.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data?? v1 db ?? v2 dw ?? v3 dd ?? v4 df ?? v5 dq ?? v6 dt ?? v7 db 1024 dup(?).codemain proc? PrintDec (type v1) ;1? PrintDec (type v2) ;2? PrintDec (type v3) ;4? PrintDec (type v4) ;6? PrintDec (type v5) ;8? PrintDec (type v6) ;10? PrintDec (type v7) ;1? retmain endpend main
$: 当前程序语句的地址
; Test10_2.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data? V1 db 11,22,33,44? V1Size = ($ - V1) ;这是变量 V1 的大小? ? V2 dw 11,22,33,44? V2Size = $ - V2 ;这是变量 V2 的大小? ? V3 dd 10 dup(0)? V3Size = $ - V3? ;这是变量 V3 的大小? V3Len = ($-V3) / 4 ;这是变量 V3(dword 类型数组)的元素数目? ? V4 db 'abcdefghijklmnopqrstuvwxyz', 0? V4Size = $ - V4? ;这是变量 V4 的大小.codemain proc? PrintHex $? ;00401001, 这是当前语句的地址? PrintDec V1Size ;4? PrintDec V2Size ;8? PrintDec V3Size ;40? PrintDec V3Len ;10? PrintDec V4Size ;27? PrintHex $? ;0040135A, 这是当前语句的地址? retmain endpend main
LENGTHOF: 数组元素个数; SIZEOF: 总字节数
; Test10_3.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data? v1 db 'abc', 0? v2 dd 11, 22, 33, 44, 55? v3 dd 10 dup(0).codemain proc? PrintDec (lengthof v1) ;4? PrintDec (lengthof v2) ;5? PrintDec (lengthof v3) ;10? ? PrintDec (sizeof v1) ;4? PrintDec (sizeof v2) ;20? PrintDec (sizeof v3) ;40? retmain endpend main
TYPEDEF: 创建自定义类型
; Test10_4.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib;自定义一个等同于 DWORD 的类型: CardinalCardinal typedef ptr dword.data? val Cardinal 100 ;使用 Cardinal 定义变量.codemain proc? PrintDec val ;100? retmain endpend main;TYPEDEF 还用于定义函数原型, 如:;MyType typedef proto :DWORD, :DWORD, :DWORD