gpt4 book ai didi

c - 库插入 nanosleep

转载 作者:太空宇宙 更新时间:2023-11-04 04:31:13 25 4
gpt4 key购买 nike

我正在尝试在 Linux 中使用库插入来 Hook 函数调用。我捕捉得很好,但有些情况我遗漏了……其中一个是 nanosleep()。我正在挂接的二进制文件每隔一秒就会使用此函数使线程休眠...如果我使用任何其他工具(如 strace),我可以毫无问题地挂接调用...我可能会丢失什么?这是我在共享库中使用的定义...

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));
}

最佳答案

strace 工具仅显示通过用户空间/操作系统边界的调用。所以,如果你看到这样一行

 nanosleep({1, 0}, 0x7ffd50e5acf0)       = 0

您正在拦截调用的程序可能直接调用了 glibc 函数 nanosleep()(这反过来导致系统调用 nanosleep()。在这种情况下您的拦截应该按预期工作。

但也有可能,程序调用

sleep(1);

在这种情况下,glibc 函数sleep()(您没有拦截)调用nanosleep()-系统调用。因此,在这种情况下,您必须拦截对 sleep() 的调用。

ltrace 工具可以帮助您找出您检查的程序调用了哪些库函数。

关于c - 库插入 nanosleep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36025849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com