吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 730|回复: 1
收起左侧

[求助] win32汇编-关于联合的一个问题

[复制链接]
FaiGi 发表于 2022-5-26 14:48
在测试联合的时候发现的一个问题,
目前没有头绪,求大佬解答:



测试环境:
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








错误-无byte数据类型.bmp.png

byte数据类型位于非首位

byte数据类型位于非首位

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hackerbob 发表于 2022-5-26 20:33
不清楚,我都是用C语言内联汇编来学习的,数据直接用指针存储。。。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表