如何获取NASM中结构体的长度?
获取NASM结构体的长度
针对你给出的结构体定义:
section .bss struc mystruc .x: resb 1 .y: resb 1 endstruc
NASM不会自动生成结构体长度的符号,需要手动定义,常用两种可靠方法:
方法一:在结构体内部显式定义长度字段
修改结构体定义,在末尾添加用equ计算的长度字段,后续可直接通过结构体名访问:section .bss struc mystruc .x: resb 1 .y: resb 1 .size: equ $ - mystruc ; $ 代表当前汇编位置,减去结构体起始偏移得到总长度 endstruc使用时直接引用
mystruc.size即可获取长度(此处结果为2)。方法二:在结构体外部定义长度符号
若不想修改结构体内部结构,可在endstruc之后单独定义长度符号:section .bss struc mystruc .x: resb 1 .y: resb 1 endstruc mystruc_size equ $ - mystruc ; 此时 $ 对应结构体结束后的位置使用时引用
mystruc_size即可。
这两种方法的优势在于,后续修改结构体成员(比如调整成员大小、新增成员)时,长度会自动更新,无需手动计算,避免出错。
内容的提问来源于stack exchange,提问作者JustFast
相关产品推荐
相关产品推荐

