linux - GNU:访问损坏的共享库错误

标签 linux assembly linker x86 gnu

这里有一些非常简单的东西:

我的代码(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 提前致谢!

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

最佳答案

如果您使用的是 64 位系统,就会发生这种情况。如果您想创建 32 位程序,请使用 as --32ld -melf_i386。另请注意,如果你想使用 libc,你应该使用入口点 main 而不是 _start 并使用 gcc -m32 进行编译和链接,这样一切都可以得到正确设置,您就可以避免此类神秘错误。

关于linux - GNU:访问损坏的共享库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29332156/

相关文章:

c++ - 包含带有全局变量的头文件

linux - SVN 提交权限被拒绝

编译 install.packages 时出现 R 错误的 ELF 类错误

linux - 如何增加 linux 上的最大套接字连接数?

visual-c++ - Visual C++/CLI - CLR 类 - LNK2020 错误 - 如何修复?

c - 未定义对符号 'sem_post@@GLIBC_2.4 的引用

java - 如何在centos上重复运行多个命令?

c - 使用 SSE 模拟标准 Math.pow 函数

assembly - 汇编中的跳转指令如何与多个进程一起工作?

c++ - 错误 C2400 : inline assembler syntax error in 'second operand' ; found 'register'