Tag: dlsym

POSIX对C中指针类型的限制

背景 POSIX标准为C语言添加了许多库函数和其他标识符。 在dlsym()函数的描述中,它说(我强调): 概要 #include void *dlsym(void *restrict handle, const char *restrict name); 描述 dlsym ()函数应获取符号的地址( 函数标识符或数据对象标识符)… C标准不保证函数指针可以转换为void * ,甚至不能保证指针的大小相同。 这有效地增加了对C类型系统的额外限制。 题 我的问题是: 对于C类型系统的这种限制是否存在规范性参考,或者它是否只能从某些库函数的描述中推导出来? POSIX甚至可以在sizeof ( function pointer ) > sizeof (void *)吗? 参考 C11标准(最终公开草案): n1570 The Open Group的POSIX标准: POSIX.1-2008 POSIX dlsym()函数

如何使用LD_PRELOAD拦截dlsym调用?

我想拦截应用程序对dlsym的调用,我已经尝试在.so中声明我正在预加载dlsym,并使用dlsym本身来获取它的真实地址,但是由于非常明显的原因不起作用。 有没有比采用进程’内存映射更容易,并使用libelf在加载的libdl.so中找到dlsym的真实位置?

使用dlsym的Ansi C补丁在linux下编译好但在Mac Os X上失败

我已经构建了一个小补丁来附加到某个应用程序并跟踪某些函数的调用。 其中,malloc()和open()。 我使用dlsym存储指向原始符号的指针,并用我自己的名称替换函数名称。 它可以在linux下完美编译和工作。 这是代码: #define _GNU_SOURCE #include #include #include #include #include /** * Interponemos nuestra funcion open * * @param char* filename * @param int flags **/ int open(char * filename, int flags) { static int (*real_open)(char*, int) = NULL; if (!real_open) real_open = dlsym(RTLD_NEXT, “open”); // Entero int p = real_open(filename, flags); fprintf(stderr, […]

如何在C中访问(动态分配)Fortran数组

我的主要问题是为什么数组做了如此奇怪的事情以及是否有任何方式以“干净”的方式执行以下操作。 我目前有一个C程序foo.c通过dlopen/dlsym连接Fortran程序bar.f90 ,大致类似于下面的代码: foo.c的: #include #include int main() { int i, k = 4; double arr[k]; char * e; void * bar = dlopen(“Code/Test/bar.so”, RTLD_NOW | RTLD_LOCAL); void (*allocArray)(int*); *(void **)(&allocArray) = dlsym(bar, “__bar_MOD_allocarray”); void (*fillArray)(double*); *(void **)(&fillArray) = dlsym(bar, “__bar_MOD_fillarray”); void (*printArray)(void); *(void **)(&printArray) = dlsym(bar, “__bar_MOD_printarray”); double *a = (double*)dlsym(bar, “__bar_MOD_a”); for(i = […]

如何正确地将dlsym返回的指针分配给函数指针类型的变量?

我试图在我的代码中使用dlopen()和dlsym()并使用gcc编译它。 这是第一个文件。 /* main.c */ #include int main() { void *handle = dlopen(“./foo.so”, RTLD_NOW); if (handle) { void (*func)() = dlsym(handle, “func”); func(); } return 0; } 这是第二个文件。 /* foo.c */ #include void func() { printf(“hello, world\n”); } 这是我编译和运行代码的方法。 $ gcc -std=c99 -pedantic -Wall -Wextra -shared -fPIC -o foo.so foo.c $ gcc -std=c99 -pedantic -Wall […]