“访问损坏的共享库”

问题描述 投票:1回答:1

我正在尝试在64位Linux系统中使用nasm而不是ld动态链接64位gcc程序。汇编代码是这样的:

extern printf
extern exit

section .data
  msg: db "Hello x%d", 10, 0   

section .text
global _start

_start:
  mov rdi, [rel msg]
  mov rsi, 64
  call printf

  mov rdi, 0
  call exit

我正在尝试从printf调用exitlibc。我组装并构建:

$ nasm -felf64 src/printf.asm -o bin/printf.o
$ ld bin/printf.o -lc -I /lib/ld-linux.so.2 -o bin/printf

然后我跑步并出现错误:

$ bin/printf
bash: bin/printf: Accessing a corrupted shared library

存在与here类似的问题,但问题恰恰相反:他们试图在64位计算机上创建32位程序。我只是想制作一个64位程序。


我找到了解决方案:存在一个带有ld-linux-x86-64.so.2的/ lib64目录,您应该使用该目录链接64位库。我仍然遇到细分错误。

assembly x86-64 nasm ld glibc
1个回答
0
投票

我只是想制作一个64位程序。

是的,但是您正在为其提供32位解释器,该解释器不适用于64位程序。

尝试改用/lib64/ld-linux-x86-64.so.2

修复后,程序启动,但是在SIGSEGV内出现printf时崩溃。修复:

mov rdi, [rel msg]

应该是:

mov rdi, msg
© www.soinside.com 2019 - 2024. All rights reserved.