我想挂钩函数调用在Linux中使用库插件。我捕获了很多很好,但有一些我缺少的情况下...这种情况之一是nanosleep()。我正在使用这个函数每秒钟挂钩的二进制文件...如果我使用任何其他工具像strace我可以挂钩的调用没有问题...我可能会错过什么?这里是我使用的共享库中的定义...图书馆interposition nanosleep
int nanosleep (const struct timespec *rqtp, struct timespec *rmtp)
{
static int (*my_nanosleep)(const struct timespec *, struct timespec *) = NULL;
if (!my_nanosleep)
my_nanosleep = (int(*)(const struct timespec *, struct timespec *)) dlsym(RTLD_NEXT, "nanosleep");
printf("\n\n nanosleep() is called and hooked with my_nanosleep() \n\n");
FILE *f = fopen("/home/user/Desktop/Test.txt", "a");
if (f==NULL)
{
printf("error opening file\n");
exit(0);
}
char *text1 = "nanosleep()";
fprintf(f, "%s\n", text1);
fclose(f);
return(my_nanosleep(rqtp, rmtp));
}
其实是的,我试图拦截nanosleep,sleep并且还睡着了。 .maybe库插入对主线程中运行的进程有一些限制吗? – Memo
有一件有趣的事情是,我注意到我的库在应用程序执行开始时拦截了很多系统调用,并且在发送停止信号后终止,但是我在中间没有看到任何内容。 ..lets说我正在运行1分钟的二进制文件:我看到只有系统调用在进程的第一个和最后一秒发生......一旦主线程启动,我什么也没有,但沉默...... – Memo