Dynamically load executable

在一个可执行程序里面可以以load动态库的形式执行另外一个程序:

$ cat 1.c  

#include 

int main(void)
{
	printf("hello,world\n");
        return 0;
}
gcc 1.c -g -o 1 -fPIC -pie

fPIC 和 pie选项是为了让 executable成为一个 shared object.

$ cat 0.c 
#include 
#include 

typedef int (*myMainType)(void);
int main(void)
{
	void *handle = dlopen("./1", RTLD_LAZY );
	if(handle == 0)
	{
		printf("%s\n", dlerror());
	}
	myMainType pMain = dlsym(handle, "main");
	pMain();
	return 0;
}
gcc 0.c  -g -o 0 -ldl
$ ./0
hello,world

 

你可能感兴趣的:(Linux)