NASM:是否可以从 C 访问 NASM 结构?

问题描述 投票:0回答:1

假设我在 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]
c assembly interop nasm
1个回答
0
投票

正如许多人在评论中指出的那样。如果没有外部程序将 NASM 结构转换为 C 头文件,C 就不可能了解 NASM 的确切结构。

但是我确实发现,做这样的事情:

global MyStruct_c
MyStruct_c: dq MyStruct.c

定义内存位置,并在其中存储所需的偏移量。

equ
也可以工作,但编译器无论如何都会将其视为指针,因此它变得非常混乱。

结束这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.