假设我在 NASM 中有一个这样的结构
struc MyStruct
.a resq 1
.b resq 1
.c resq 1
endstruc
我可以使用 C 中的什么声明来通过 MyStruct.c 访问 MyStruct.a?
C 不允许在符号中使用点。因此,即使我将符号 MyStruct.a 设为全局,我也无法使用 C 中的
extern
指令来访问它。
我想这样做的原因是因为我不想将 NASM 结构转换为 C 标头。但如果没有其他选择,我最终会这样做来访问我在 C 中的结构,这样我就可以做类似的事情
void cfunc(MyStruct* s){
s->a = 1;
s->b = 2;
s->c = 3;
}
然后回到NASM
mov rax, [rbx + MyStruct.a]
正如许多人在评论中指出的那样。如果没有外部程序将 NASM 结构转换为 C 头文件,C 就不可能了解 NASM 的确切结构。
但是我确实发现,做这样的事情:
global MyStruct_c
MyStruct_c: dq MyStruct.c
定义内存位置,并在其中存储所需的偏移量。
equ
也可以工作,但编译器无论如何都会将其视为指针,因此它变得非常混乱。
结束这个问题。