FaiGi 发表于 2022-5-26 14:48

win32汇编-关于联合的一个问题

在测试联合的时候发现的一个问题,
目前没有头绪,求大佬解答:


测试环境:
win10-ltsc2019-x64,vs2022社区版17.2.2
请设置附加依赖项为MASM,平台为X86




测试代码样板:




; 联合测试
; 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):
我们定义联合:
Unionby union
byte1 byte 0
word1 word 0
dword1 dword 0
Unionby ends



此时,可以赋值-1
testcode Unionby <-1>
此时,byte数据类型位于第一位定义

再定义联合:
Unionby union
dword1 dword 0
byte1 byte 0
word1 word 0
Unionby ends



给定正值,没有问题
但是,给定负值,
如果byte数据类型不位于第一位,
那么就触发异常


(2):
定义联合:
Unionby union
dword1 dword 0
word1 word 0
Unionby ends



此时联合内没有定义byte,
但是任然无法给定负值,或者超过255的值,
testcode1 Unionby <-1>
testcode2 Unionby <256>
同样会触发异常,
按逻辑,word无符号数取值0-65535








hackerbob 发表于 2022-5-26 20:33

不清楚,我都是用C语言内联汇编来学习的,数据直接用指针存储。。。。。。{:301_1007:}
页: [1]
查看完整版本: win32汇编-关于联合的一个问题