我想掛鉤函數調用在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