作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在这方面绝对是新手,但在类里面,老师给了我们他写的文件,让我们运行它,然后它工作得很好,但是当我尝试在家里做它时(我在 VirtualBox 上使用 Linux)并使用:
nasm -f elf64 hello.asm -o hello.o
gcc hello.o -o hello
我收到错误“创建共享库时不能使用针对 `.bss' 的重定位 R_X86_64_32S;使用 -fPIC 重新编译”。有人可以解释一下如何使它工作吗?
global main
extern printf
section .data
napis: db ' Hello world! - po raz %ld',10,0
liczba_iteracji: equ 5
section .bss
licznik: resb 1
section .text
main:
push rbp
mov rbp,rsp
mov byte [licznik],0
petla: ;naiwna!
inc byte [licznik]
mov rdi, qword napis
mov rsi, qword [licznik]
mov rax, 0
call printf
cmp byte [licznik],liczba_iteracji
jnz petla
mov rsp,rbp
pop rbp
mov rax,1 ;SYS_EXIT
mov rbx,0
int 80h
最佳答案
你需要确定你写的是position independent code . PIC 的想法是要使代码真正与位置无关,您至少需要一个间接级别。这种间接级别是 IP 相对寻址,当这还不够时,您将需要第二层,即全局偏移表或 GOT。
在 NASM 中,您会找到 DEFAULT REL有用的指令。
关于linux - "relocation R_X86_64_32S against `.bss ' can not be used when making a shared object”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40820814/
我是一名优秀的程序员,十分优秀!