gpt4 book ai didi

linux - "relocation R_X86_64_32S against `.bss ' can not be used when making a shared object”

转载 作者:IT王子 更新时间:2023-10-29 01:25:49 27 4
gpt4 key购买 nike

我在这方面绝对是新手,但在类里面,老师给了我们他写的文件,让我们运行它,然后它工作得很好,但是当我尝试在家里做它时(我在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com