相关疑难解决方法(0)

构建一个也是可执行文件的.so

所以每个人都可能知道glibc /lib/libc.so.6可以在shell中执行,就像普通的可执行文件一样,在这种情况下它可以打印出版本信息并退出.这是通过在.so中定义入口点来完成的.对于某些情况,将其用于其他项目可能会很有趣.不幸的是,您可以通过ld的-e选项设置的低级入口点有点太低级:动态加载器不可用,因此您无法调用任何正确的库函数.因此,glibc通过此入口点中的裸系统调用实现write()系统调用.

我现在的问题是,任何人都可以想到一个很好的方法,如何从该入口点引导一个完整的动态链接器,以便可以访问其他.so的函数?

c linux glibc shared-libraries dlopen

48
推荐指数
2
解决办法
4467
查看次数

可执行的共享库

大多数情况下,当您编译共享库时,执行它是没有意义的,这样做没有任何用处:

$ ./libfoobarbaz.so
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

但是,当执行glibc时,GNU的人们能够坚持一些输出:

$ /lib/libc.so.6
GNU C Library (Debian EGLIBC 2.11.2-10) stable release version 2.11.2, by Roland McGrath et al.
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.4.5.
Compiled on a Linux 2.6.32 system on 2011-01-23.
Available extensions:
    crypt add-on version 2.1 by Michael Glad and others
    GNU …
Run Code Online (Sandbox Code Playgroud)

c shared-libraries

5
推荐指数
1
解决办法
1130
查看次数

标签 统计

c ×2

shared-libraries ×2

dlopen ×1

glibc ×1

linux ×1