ltrace

使用 ltrace 计时系统调用:添加 `syscall` + `clock_gettime`?
ltrace

使用 ltrace 计时系统调用:添加 `syscall` + `clock_gettime`?

我正在寻找系统调用方面的一些清晰度。我尝试通过直接调用系统调用来避免 vDSO clock_gettime。这是一个名为 的程序的片段sys_clock_gettime。 int clock = CLOCK_MONOTONIC; struct timespec ts; if (syscall(__NR_clock_gettime, clock, &ts) == -1){ exit(-1); } 该程序采用时钟的名称(CLOCK_BOOTTIME, CLOCK_MONOTONIC等)和要进行的许多调用。例如,下面的代码片段将调用 100 次cl...

Admin

为什么 ltrace 不显示对 glibc __nss_configure_lookup() 的调用
ltrace

为什么 ltrace 不显示对 glibc __nss_configure_lookup() 的调用

我试图了解ltrace命令是如何工作的。 所以我一直在闲逛/etc/nsswitch.conf。我在那里有一个“hosts:resolve”行 - 它告诉glibc动态加载nss-resolve进行主机名查找时的插件模块。我希望看到插件被加载ltrace: $ ltrace getent hosts google.com mtrace() = <void> setlocale(LC_ALL, "") ...

Admin

有没有 ltrace 的替代品可以完成相同的工作?
ltrace

有没有 ltrace 的替代品可以完成相同的工作?

ltrace不适用于与链接的二进制文件-z now选项链接的二进制文件 - 检查这问题——这是我的 Ubuntu 19.10 系统上的默认设置。它仅适用于与-z lazy. 有没有什么替代方案ltrace可以完成相同的工作,但可以工作惰性链接二进制也? ...

Admin

为什么strace和ltrace会导致EINTR发生?
ltrace

为什么strace和ltrace会导致EINTR发生?

考虑这个程序: #include <stdio.h> #include <sys/epoll.h> int main(void) { int epfd = epoll_create1(0); struct epoll_event event; event.events = EPOLLIN; event.data.fd = 0; epoll_ctl(epfd, EPOLL_CTL_ADD, 0, &event); epoll_wait(epf...

Admin

Systemtap 会导致段错误,为什么?
ltrace

Systemtap 会导致段错误,为什么?

我正在尝试监视系统范围内的库调用。我编写了这个脚本来跟踪库调用libguestfs: probe begin { printf("ok\n") } probe process("/usr/lib64/libguestfs.so.0.471.0").function("*") { print_usyms(ubacktrace()) } 然后,我将其保存为 test.stp 并运行“sudo stap test.stp”。我需要一些使用这些函数调用的进程,以便我可以拦截它们。因此,我使用了一个简单的程序,名为...

Admin

如何在C程序中连续检查ltrace命令输出
ltrace

如何在C程序中连续检查ltrace命令输出

我正在尝试ltrace使用 C 程序捕获命令的输出。 我尝试过使用,popen()但这不起作用,我需要捕获连续输出,而不仅仅是一次。 下面是我的代码: #include <stdio.h> #include <stdlib.h> int main(int carg, char *args[]) { FILE *fp = popen("ltrace -p pid", "r"); char buf[255]; while (1) { if (f...

Admin

vfork() 调用 SYS_vfork 但 fork() 调用 SYS_clone?
ltrace

vfork() 调用 SYS_vfork 但 fork() 调用 SYS_clone?

在运行ltrace -S由(版本 5.4.0)编译的两个程序gcc(一个调用vfork()另一个调用 )后fork(),我发现vfork()调用SYS_vfork同时fork()调用SYS_clone。我在任何地方都找不到有关此特定行为的任何信息(一些消息来源说每个fork(),vfork()和clone()都是由相应命名的sys_调用实现的,而其他消息来源则说所有三个调用都是使用 实现的sys_clone)。 源代码: #include<stdio.h> main() { int pid; pid=vfork...

Admin

对库函数调用的系统范围监控
ltrace

对库函数调用的系统范围监控

我有一个现代的 Linux 桌面,其中有许多进程同时运行。其中一个进程(我不知道是哪一个)调用some_func流行动态库中的函数some_lib(想想libc或libx11,所以一个很多的进程使用它),我想知道哪个进程执行此操作(理想情况下,有每次调用的堆栈跟踪)。 如何确定哪个进程调用some_lib? 到目前为止我考虑过的选项: 使用ltraceor latrace:有一个ltrace-style 详细列表,列出我感兴趣的函数调用的进程以及哪些参数将是完美的,但ltrace仅适用于单个进程或进程组。我不能只输入ltrace -e some_fu...

Admin

getauxval 可以用来确定您是否被追踪吗?
ltrace

getauxval 可以用来确定您是否被追踪吗?

即将离开这个问题,我修补了内核,以求在 Linux 上启动 SQL Server 2017。现在我已经走得更远了,但我被关闭了, strstr("TracerPid:\t0\n", "TracerPid:") = "TracerPid:\t0\n" strtol(0x7fe0cf01840b, 0x7ffd380d5eb0, 10, 0) ...

Admin

如何从进程中隐藏 TracerPID?
ltrace

如何从进程中隐藏 TracerPID?

我猜测Linux 上的 SQL Server 正在检查/proc/self/status,TracerPID如果没有则停止运行0。我想测试一下。玩玩,这是 strace, ... lots of stuff openat(AT_FDCWD, "/proc/self/status", O_RDONLY) = 5 fstat(5, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0 read(5, "Name:\tsqlservr\nUmask:\t0022\nState"..., 1024) = 1024 close(5)...

Admin

为什么 ltrace 没有输出
ltrace

为什么 ltrace 没有输出

几天来我一直在终端模拟器中运行这个命令 ltrace -p `pgrep xfwm4` 正常使用系统时,我还没有看到任何输出ltrace。注:xfwm4是Xfce的窗口管理器。 这是预期的吗?繁忙的窗口管理器不进行任何库调用? 我在 xfwm4 中遇到了一个随机发生的不可预测的错误,我希望ltrace能提供一些关于导致该错误的原因的线索。 ...

Admin

如何在运行时跟踪加载的共享库的符号?
ltrace

如何在运行时跟踪加载的共享库的符号?

我希望能够知道运行时某个共享库中使用的符号是什么。我使用gdb并将其设置solib-search-path为用户定义的共享库。我不确定是否还有其他方法ltrace ...

Admin

ltracing共享库,如何?
ltrace

ltracing共享库,如何?

我想跟踪对特定库的函数调用,将其称为 libfoo。不幸的是,我找到的有关它的文档很少,所以我有很多问题。 在 libfoo 的文档中,它将调用 foo_a、foo_b、foo_c .. 列为 api 调用。在 Windows DLL 中,生成这样的调用列表很容易,每个外部调用都必须如此声明(dllexport(DLL) 或类似的东西),一个简单的脚本将提取所有导出的符号。我将如何为 Linux 共享对象生成这样的列表。 一旦生成这样的列表,我如何将它与 ltrace 一起使用来生成使用特定程序的调用的跟踪。另外,如何扩展这些调用中的 ( C ) 字符串...

Admin

参考
ltrace

参考

当ltrace用于跟踪系统调用时,我可以看到 fork() 使用 sys_clone() 而不是 sys_fork()。但我找不到定义它的linux源代码。 我的程序是: #include<stdio.h> main() { int pid,i=0,j=0; pid=fork(); if(pid==0) printf("\nI am child\n"); else printf("\nI am parent\n"); ...

Admin

如何判断进程正在执行什么指令?
ltrace

如何判断进程正在执行什么指令?

我了解 strace 和 ltrace,但这仅告诉我进程正在执行哪些系统调用和库调用。我想确切地知道进程正在执行什么指令。要么是汇编,要么是 C 语言和汇编之间的某种中间立场(如果可能的话)。假设二进制文件尚未使用调试符号进行编译,因此更有可能倾向于第一个选项。 使用案例:进程似乎挂起,strace 或 ltrace 没有输出。确定进程是否正在做“某事”。我意识到这可能很难确定,因为我认为这类似于解决停止问题。然而,也许可以收集有用的数据。 第二个用例:好奇心。将整个汇编指令列表转储到文本列表中会很有趣。 我的猜测是我可以使用 gdb 来执行此操作,但...

Admin