首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“访问已损坏的共享库”

“访问已损坏的共享库”
EN

Stack Overflow用户
提问于 2020-06-07 09:01:23
回答 1查看 1.1K关注 0票数 2

我试图在64位Linux系统中使用ld而不是gcc来动态链接64位的Linux程序。程序集代码如下:

代码语言:javascript
复制
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

我正试图从printfexit打电话给libc。我组装和建造:

代码语言:javascript
复制
$ nasm -felf64 src/printf.asm -o bin/printf.o
$ ld bin/printf.o -lc -I /lib/ld-linux.so.2 -o bin/printf

然后我运行并得到一个错误:

代码语言:javascript
复制
$ bin/printf
bash: bin/printf: Accessing a corrupted shared library

有一个与here类似的问题,但问题正好相反:他们试图在64位机器上创建一个32位程序。我只是想做一个64位的程序。

我找到了解决方案:有一个带有d-Linux86-64.so.2的/lib64目录,您应该使用它来链接64位库。不过,我还是有个分割错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-08 02:54:33

,我只是想做一个64位的程序.

是的,但是你为它提供了32位的解释器,这对于64位程序来说是行不通的。

尝试使用/lib64/ld-linux-x86-64.so.2代替。

修复之后,程序就会启动,但是SIGSEGV会在printf中崩溃。修正:

代码语言:javascript
复制
mov rdi, [rel msg]

应:

代码语言:javascript
复制
mov rdi, msg
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62243115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档