【问题标题】:GNU: Accessing a corrupted shared library errorGNU:访问损坏的共享库错误
【发布时间】:2015-03-29 17:08:00
【问题描述】:

这里有一些超级简单的东西:

我的代码(p1.s):

    .intel_syntax noprefix
.arch i386
.data
poruka:
    .asciz "Zdravo svete!\n"
kraj_poruke:

.equ duzina_poruke, kraj_poruke - poruka

.text
.extern write
.extern exit
.globl _start

_start:
push duzina_poruke
push offset poruka
push 1
call write
add esp, 12

push 0
call exit

.end

我用来组装和链接文件的命令:

as -o p1.o p1.s
ld -o p1 -dynamic-linker /lib/ld-linux.so.2 p1.o -l c

在这些命令之后,我将 p1.s、p1.o 和 p1 文件都放在了我想要它们的目录中。

我得到的错误:

bash ./p1 : Accessing a corrupted shared library.

为什么? :D 提前致谢!

有人可以向我解释为什么这不起作用吗?提前致谢! :)

【问题讨论】:

    标签: linux assembly linker x86 gnu


    【解决方案1】:

    如果您使用的是 64 位系统,则会发生这种情况。如果要创建 32 位程序,请使用 as --32ld -melf_i386。另请注意,如果您想使用 libc,则应使用入口点 main 而不是 _start 并使用 gcc -m32 编译和链接,以便正确设置所有内容并避免此类神秘错误。

    【讨论】:

    • 嘿,我试过了(顺便说一句,是的,我在 64 位系统上): ld -melf_i386 -dynamic-linker /lib/ld-linux.so.2 p1.o -lc 但是现在我收到错误:ld: 找不到 -lc 怎么回事
    • 您没有安装 32 位 C 库。
    猜你喜欢
    • 1970-01-01
    • 2020-09-26
    • 2015-08-05
    • 1970-01-01
    • 2017-03-07
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多