我对 X86_64 上的 NASM 程序集完全陌生。我想在 asm 程序中访问我的变量 toto 并增加其值。到目前为止,我正在执行以下操作:
C程序:
#include <stdio.h>
#include <inttypes.h>
int64_t toto;
extern void modifytoto(void);
int main() {
toto=0;
modifytoto();
printf("toto = %d \n",toto);
return 0;
}
汇编程序如下(增量为伪代码)。
global modifytoto
global toto
section .text
modifytoto:
mov rax, 1
mov toto, rax
ret
我不能使用 toto 作为 modifytoto() 的参数,因为它应该用于更复杂的程序中,我不想在其中修改参数。
我正在使用以下 cmd 进行组装
nasm -f elf64 -o mix_asm.o kernel3.asm
我收到这条消息:
kernel3.asm:7: error: symbol `toto' undefined
我的代码有什么问题?
最佳答案
你需要把线
extern toto
在使用
toto
告诉 NASM toto
是外部符号之前的某个地方。这就像在 C 中:如果你不通过声明 toto
来告诉它,编译器不知道 toto
应该是什么。关于c - 来自 C 的 NASM X86_64 全局变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33497534/