在测试联合的时候发现的一个问题,
目前没有头绪,求大佬解答:
测试环境:
win10-ltsc2019-x64,vs2022社区版17.2.2
请设置附加依赖项为MASM,平台为X86
测试代码样板:
[Asm] 纯文本查看 复制代码 ; 联合测试
; by faigi
.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.data
; 在这里声明变量
Unionby union
byte1 byte 0
word1 word 0
dword1 dword 0
Unionby ends
;此处可以调换顺序测试
.code
main PROC
; 在这里编写自己的代码
; testcode Unionby <-1>
; testcode Unionby <256>
INVOKE ExitProcess, 0
main ENDP
END main
问题:
(1):
我们定义联合:
[Asm] 纯文本查看 复制代码 Unionby union
byte1 byte 0
word1 word 0
dword1 dword 0
Unionby ends
此时,可以赋值-1
[Asm] 纯文本查看 复制代码 testcode Unionby <-1>
此时,byte数据类型位于第一位定义
再定义联合:
[Asm] 纯文本查看 复制代码 Unionby union
dword1 dword 0
byte1 byte 0
word1 word 0
Unionby ends
给定正值,没有问题
但是,给定负值,
如果byte数据类型不位于第一位,
那么就触发异常
(2):
定义联合:
[Asm] 纯文本查看 复制代码 Unionby union
dword1 dword 0
word1 word 0
Unionby ends
此时联合内没有定义byte,
但是任然无法给定负值,或者超过255的值,
[Asm] 纯文本查看 复制代码 testcode1 Unionby <-1>
testcode2 Unionby <256>
同样会触发异常,
按逻辑,word无符号数取值0-65535
|