我正在学习x86汇编语言,并希望在C中调用NASM函数。当我运行程序时,会出现以下错误:
“段错误(核心已转储)”
我已尝试多种变体的简单测试函数,但每次都在同一位置停止。
以下是我的asm和c文件:
div.asm:
我使用以下方式编译和链接文件:
“段错误(核心已转储)”
我已尝试多种变体的简单测试函数,但每次都在同一位置停止。
以下是我的asm和c文件:
div.asm:
global _test
_test:
push ebp
mov ebp, esp
push ebx
mov eax, [ebp+8]
mov ebx, [ebp+12]
div ebx
pop ebp
ret
main.c:
#include <stdio.h>
extern unsigned int test (unsigned int, unsigned int);
int main(void)
{
printf("%d\n", div(85,5));
return 0;
}
我使用以下方式编译和链接文件:
我编译并链接这些文件:
nasm -f elf -o div.o div.asm
gcc -m32 -c -o main.o main.c
gcc -m32 -o run div.o main.o
我在一台虚拟机中使用了64位Linux
。
这里有什么错误,应该如何解决?
div
问题。 - Peter Cordes_
开头的名称。你正在调用的test
函数甚至不是你组装的_test
函数!既然它链接了,那么这个符号肯定存在于某个库中,我猜?再次强调,调试器非常重要。使用-g
编译。像这样:gcc -m32 -Wall -Wextra -Og -g main.c div.o -o run
- Peter Cordesxor edx, edx
以确保被除数的高32位为零。 - Michael Petchtest()
的原型,但调用了div()
。 - Peter Cordes