我为dlopen编写了一个程序
void hello()
{
printf("hello world\n");
}
int main(int argc, char **argv)
{
char *buf="hello";
void *hndl = dlopen(argv[0], RTLD_LAZY);
void (*fptr)(void) = dlsym(hndl, buf);
if (fptr != NULL)
fptr();
dlclose(hndl);
}
但我收到“分段错误”错误,我使用.so库测试了该程序,它可以工作,但无法使其自身运行
您需要编写代码:
// file ds.c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
void hello ()
{
printf ("hello world\n");
}
int main (int argc, char **argv)
{
char *buf = "hello";
void *hndl = dlopen (NULL, RTLD_LAZY);
if (!hndl) { fprintf(stderr, "dlopen failed: %s\n", dlerror());
exit (EXIT_FAILURE); };
void (*fptr) (void) = dlsym (hndl, buf);
if (fptr != NULL)
fptr ();
else
fprintf(stderr, "dlsym %s failed: %s\n", buf, dlerror());
dlclose (hndl);
}
仔细阅读dlopen(3),始终检查那里的dlopen
&dlsym
函数是否成功,并dlerror
在失败时使用。
并用编译上面的ds.c
文件
gcc -std=c99 -Wall -rdynamic ds.c -o ds -ldl
不要忘记-Wall
获得所有警告和-rdynamic
标志(以便能够将dlsym
自己的符号放入动态表中)。
在我的Debian / Sid /
x86-64系统上(gcc
版本4.8.2和libc6
版本2.17-93提供了-ldl
我编译的内核3.11.6,binutils
软件包2.23.90提供了ld
),执行./ds
给出了预期的输出:
% ./ds
hello world
乃至:
% ltrace ./ds
__libc_start_main(0x4009b3, 1, 0x7fff1d0088b8, 0x400a50, 0x400ae0 <unfinished ...>
dlopen(NULL, 1) = 0x7f1e06c9e1e8
dlsym(0x7f1e06c9e1e8, "hello") = 0x004009a0
puts("hello world"hello world
) = 12
dlclose(0x7f1e06c9e1e8) = 0
+++ exited (status 0) +++
vendor 文件是什么? 任何一个 Composer 程序包想要传递给安装包的用户的命令行脚本都应该被列为 vendor 文件。 如果包包含了包用户不需要的其他脚本(如构建或编译脚本),则代码不应被列为 vendor 文件。 它是如何定义的? 它是通过将 bin 键添加到项目中来定义的 composer.json。它被指定为文件数组,因此可以为任何给定项目添加多个二进制文件。 { "bi
问题内容: 首先,我已经在Google上进行了搜索,但只找到了将压缩文件(例如)嵌入到Shell脚本中的示例。 基本上,如果我有一个打印字符串的C程序(),请说 Hello World! 。 我编译它以获得可执行的二进制文件 现在我有一个shell脚本 我要问的是是否有可能将二进制( hello )嵌入到shell脚本中,以便在我运行时 它执行二进制文件以打印 Hello World! 。 澄清
本文向大家介绍Python编译为二进制so可执行文件实例,包括了Python编译为二进制so可执行文件实例的使用技巧和注意事项,需要的朋友参考一下 通过cpython把python的文件转换为二进制文件,达到代码保护的目的 1、下载Cython-0.28.2.tar.gz python setup.py install安装 2、创建你需要打包成二进制的python文件 3、创建一个setup.py
我正在将一个CLI库从Ruby移植到Node.js。在我的代码中,我会在必要时执行几个第三方二进制文件。我不确定如何在Node中最好地完成这一点。 下面是Ruby中的一个示例,我调用PrinceXML将文件转换为PDF: 节点中的等价代码是什么?
问题内容: 我有一个包含两个简单的Java swing文件的程序。 如何为程序制作可执行的jar文件? 问题答案: jar文件只是包含Java文件集合的文件。为了使jar文件可执行,你需要指定 Class在jar文件中的位置。示例代码如下。 编译你的类。要制作一个jar,你还需要创建一个清单文件()。例如, 将编译后的输出类文件(JarExample.class,JarExample $ 1.cl
我有一个可执行的二进制文件,我需要运行它,以交互方式从中读取,并在它请求输入时写入 我说的是交互式shell,但在web浏览器中,例如: 只要二进制产生输出,我想把它发送到浏览器 一旦二进制请求用户输入,我希望用户从浏览器写入输入 现在我已经用做了同样的事情,我用管道与正在运行的进程通信,它工作得很好,但是我必须在运行二进制之前传递所有必需的输入 以下是我迄今为止编写的代码: 任何帮助都将不胜感激