1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
__GLXextFuncPtr glXGetProcAddressARB (const GLubyte * name)
{
}
__GLXextFuncPtr glXGetProcAddress(const GLubyte *name)
{
return glXGetProcAddressARB(name);
}
/* Modify the __start function by overiding this function */
int __libc_start_main(int(*main_fct)(int, char **), int argc,
char ** ubp_av,void (*init) (void), void (*fini) (void),
void (*rtld_fini) (void),void (* stack_end)) {
int (*func)(int(*)(int, char **), int, char **,
void (*) (void), void (*) (void),
void (*) (void), void(*));
func = dlsym(((void *) -1l), "__libc_start_main");
static int loaded=0;
if (loaded)
return;
loaded=1;
/* open library (NOTE: you may need to change this filename!) */
void* lib_handle_libGL = NULL;
char* libGL_places[] = {
"/usr/lib64/libGL.so",
"/usr/lib64/mesa/libGL.so.1",
"/usr/lib/libGL.so",
"/usr/lib/mesa/libGL.so.1",
NULL
};
int i = 0;
while(!lib_handle_libGL && libGL_places[i])
{
lib_handle_libGL = dlopen(libGL_places[i], RTLD_LAZY);
i++;
}
if (!lib_handle_libGL){perror("Can't find host libGL");exit(0);}
/* get the host getprocaddress function */
lib_glXGetProcAddressARB = dlsym(lib_handle_libGL, "glXGetProcAddressARB");
functable_init();
int r= func(main_fct, argc, ubp_av, init, fini, rtld_fini, stack_end);
return r;
}
|