"Accessing a corrupted shared library"
"Accessing a corrupted shared library"
我正在尝试使用 ld
而不是 gcc
在 64 位 Linux 中动态 link 64 位 nasm
程序系统。汇编代码是这样的:
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
我正在尝试从 libc
呼叫 printf
和 exit
。我 assemble 并构建:
$ 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
有一个类似问题的问题,但那里的问题恰恰相反:他们试图在 64 位机器上创建 32 位程序。我只是想制作一个 64 位程序。
我找到了解决方案:有一个带有 ld-linux-x86-64.so.2 的 /lib64 目录,您应该将其用于 link 64 位库.不过,我仍然遇到分段错误。
I'm just trying to make a 64-bit program.
是的,但是您要为其提供 32 位解释器,这不适用于 64 位程序。
请尝试使用 /lib64/ld-linux-x86-64.so.2
。
修复后,程序启动,但在 printf
内崩溃并显示 SIGSEGV
。修复:
mov rdi, [rel msg]
应该是:
mov rdi, msg
我正在尝试使用 ld
而不是 gcc
在 64 位 Linux 中动态 link 64 位 nasm
程序系统。汇编代码是这样的:
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
我正在尝试从 libc
呼叫 printf
和 exit
。我 assemble 并构建:
$ 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
有一个类似问题的问题
我找到了解决方案:有一个带有 ld-linux-x86-64.so.2 的 /lib64 目录,您应该将其用于 link 64 位库.不过,我仍然遇到分段错误。
I'm just trying to make a 64-bit program.
是的,但是您要为其提供 32 位解释器,这不适用于 64 位程序。
请尝试使用 /lib64/ld-linux-x86-64.so.2
。
修复后,程序启动,但在 printf
内崩溃并显示 SIGSEGV
。修复:
mov rdi, [rel msg]
应该是:
mov rdi, msg