使用scanf的程序中的分段错误

时间:2019-03-21 14:02:12

标签: linux gcc assembly x86-64 nasm

我的VirtualBox上的汇编程序有问题。
在VB上,我有Linux Mint(64位)。我试图编译此汇编代码(在文件my_file.asm中):

extern printf  
extern scanf  

section .data  
format: db "%d",0  
napis: db "a/b=%d",10,0  

section .bss  
a: resd 1  
b: resd 1  

global main  
section .text  
main:  

mov rdi, format  
mov rsi, a  
xor rax, rax  
call scanf  

mov rdi, format  
mov rsi, b  
xor rax, rax  
call scanf  

mov eax, [a]  
xor edx, edx  
div dword[b]  

ret

首先输入:nasm -f elf64 myfile.asm
然后输入:gcc myfile.o -o myfile
然后,我收到此错误消息:
 “ / usr / bin / ld:plik.o:针对.bss的R_X86_64_32S相对于.bss的重定位无法使用;请使用-fPIC
重新编译 / usr / bin / ld:最终链接失败:输出中的不可代表部分
collect2:错误:ld返回1退出状态 “

所以我将-no-pie添加到gcc命令:gcc -o test test.o -no-pie

现在,当我使用./my_file时出现此错误:Segmentation fault (core dumped),我不知道该怎么办。

0 个答案:

没有答案