我对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
我的代码出了什么问题?
答案 0 :(得分:3)
你需要把这行
extern toto
在您使用toto
告诉NASM toto
是外部符号之前的某个地方。就像在C中一样:如果您不通过声明toto
告诉它,编译器不知道toto
应该是什么。