使用时,可以通过编程方式从共享库(仅Linux)中获取所有函数名称的列表dl_open()
吗?
我想要这样的东西:
std::vector<std::string> list_all_functions(void *dl) {
//... what can I do here?
}
int main() {
void * dl = dl_open("./mylib.so", RTLD_NOW);
auto functions = list_all_functions(dl);
//...
dl_close(dl);
return 0;
}
示例库(mylib.so)
标头(.h):
extern "C" {
int sum (int a, int b);
}
来源(.c):
int sum (int a, int b) { return a + b; }
我知道的肮脏骇客:用途nm
或objdump
实用工具
没有libc函数可以做到这一点。但是,您可以自己编写(或从readelf之类的工具复制/粘贴代码)。
在Linux上,dlopen()
返回link_map
结构的地址,该结构的成员名为l_addr
,指向存储的共享库的基址(假设您的系统没有随机分配共享库的位置,并且您的库尚未预链接)。
在Linux上,办法找到基地址(地址Elf*_Ehdr
)是使用dl_iterate_phdr()
后dlopen()
荷兰国际集团的库。
有了ELF标头,您应该能够通过首先定位Elf*_Phdr
type
PT_DYNAMIC
,然后定位DT_SYMTAB
,DT_STRTAB
条目,并迭代动态符号表中的所有符号,来遍历导出的符号列表(动态符号表)。使用/usr/include/elf.h
来指导你。
另外,您可以使用libelf,我个人不太了解。
但是,请注意,您将获得已定义函数的列表,但不知道如何调用它们。
我想分享一个文件(. pdf,. apk等)使用分享意图,我搜索谷歌,但我只找到共享图像的代码
我想把我的sqlite DB文件上传到DropBox。但在此之前,我需要在代码中获取sqlite Db文件。如何在任何设备上执行此操作?我查看了这个链接,它说用户需要root权限才能访问数据库。 所以简而言之: 如何使用非根设备访问我的sqlite数据库?eg 如果这种方法不可行,我如何将我的应用程序数据库保存在一个可以访问它的地方? 如果我能解释什么,请告诉我。提前谢谢
我需要实现一个函数,该函数获取一个由n个元素和一个数字k组成的数组A作为输入,并返回一个包含大小为k的所有子集的数组(每个子集本身就是一个数组)。 定义函数的类型,并为函数实现至少3个测试(使用assert)。它应该是Javascript/Typescript和functional 例如:FunSubset([1,2,3],2)= 有什么想法吗?
问题内容: 如何从包含证书和私钥的PEM文件中以编程方式获取KeyStore?我试图在HTTPS连接中向服务器提供客户端证书。我已经确认,如果我使用openssl和keytool来获取jks文件(该文件是动态加载的),则客户端证书可以使用。我什至可以通过动态读取p12(PKCS12)文件来使其工作。 我正在考虑使用BouncyCastle的PEMReader类,但无法克服一些错误。我正在使用-Dj
在 Python 中,我们使用 def 语句来定义函数,比如: def double(x): return 2 * x 除了用上面的方式定义函数,Python 还提供了一个关键字 lambda,让我们可以创建一个匿名函数,也就是没有名称的函数。它的形式如下: lambda 参数: 表达式 关键字 lambda 说明它是一个匿名函数,冒号 : 前面的变量是该匿名函数的参数,冒号后面是函数的返
问题内容: 有没有办法在Kubernetes中以编程方式获取容器所属的Pod的名称?如果可以,怎么办?我正在使用fabric8的Java客户端,但是curl或类似的东西也可以。 请注意,我不想使用特定的标签来查找容器,否则(我假设)如果使用复制控制器进行缩放,则可能无法始终找到正确的容器。 问题答案: 您可以使用向下API告诉Kubernetes将pod名称放入您选择的环境变量中。 例如: