问题标签 [strace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
856 浏览

android - 如何在 strace 输出中找出这些 syscall_983045、syscall_322 系统调用是什么?

我在我的 strace 日志中经常看到这两个系统调用。

找出这些系统调用含义的最佳方法是什么?

我在 linux 内核源代码树中尝试了 include/linux/syscalls.h。但在那里找不到任何东西。

这个android ics系统。Linux 3.0 代码。

0 投票
3 回答
3726 浏览

iphone - iphone:strace、dtruss、dtrace 还是同等产品?

有谁知道是否有类似strace、、dtrussdtrace用于 iPhone 的东西?

0 投票
2 回答
1231 浏览

perl - How to find the current step the running perl/python script is executing?

I have a huge Perl script,which many times it hangs, When it's in running state, i need to find out, which step it's now executing.
I don't want "Devel::Trace" [compile time entity], Is there anything like strace kind of thing? to which i can pass the pid of the script and it will show me, what is it executing at run time. Please let me know.

~ Mandar.

0 投票
2 回答
1213 浏览

process - strace 中的系统调用

我调用strace了一些A分叉两个子程序的程序:BC.

strace中,我有以下内容syscalls

我正在尝试A用 C 重写程序。在这种情况下,我真的不需要知道那些文件描述符3,和代表什么4,对吗?有没有办法找出它们是什么?我知道是为了.563stderr

0 投票
1 回答
1884 浏览

android - Android strace(或任何 linux 二进制文件)执行

我有一个可能很容易解决的问题,但我似乎找不到答案。

我正在尝试在 Android 设备上运行的不同进程上执行 strace。我通过将 strace 二进制文件复制到 /system/xbin (就像模拟器一样)成功地做到了这一点,并且工作得很好。我的问题是我通过引导加载程序复制了二进制文件,我不希望用户必须通过它。

所以我发现这个很棒的教程可以在应用程序中运行二进制文件:

http://gimite.net/en/index.php?Run%20native%20executable%20in%20Android%20App

我按照教程进行操作:

  • 将 strace 的二进制文件复制到 /data/data/com.mypackage
  • 将执行权限更改为二进制文件(我也尝试过 777)
  • 尝试执行它

    进程进程 = Runtime.getRuntime().exec("/data/data/com.mypackage/strace -p PID -o /sdcard/folder_I_know_it_works");

我知道该命令是正确的,因为当我从 /xbin/system 执行它时,它可以完美运行。当我运行从我的应用程序中复制的那个时,我得到空输出。我只为自己的流程获得正确的输出,所以我知道这是一个权限问题。

当然,我还没有提到我对我的应用程序拥有 root 权限。我还尝试将 strace 二进制文件的所有者更改为 root:root 和 system:system,什么都没有。

总结一下:我需要在从应用程序复制到手机内存的二进制文件上获得与在 /xbin/strace 上找到的二进制文件相同的权限

我究竟做错了什么?

另一个好的解决方案是找到一种方法,将 strace 从具有 root 权限的应用程序中复制到 /system/xbin。有任何想法吗?

提前非常感谢!

0 投票
7 回答
32692 浏览

linux - 如何在 Linux 中跟踪每个文件的 IO 操作?

我需要跟踪read特定文件的系统调用,我目前正在通过解析strace. 由于read对文件描述符进行操作,我必须跟踪 和 之间的当前fd映射path。此外,seek必须进行监视以使当前位置在跟踪中保持最新。

有没有更好的方法在 Linux 中获取每个应用程序、每个文件路径的 IO 跟踪?

0 投票
0 回答
196 浏览

android - Android:如何中断 strace

我想打断 strace 并捕获一些消息。接缝似乎不可能还是我是假的?可以连接一些 Binder 并从中捕获消息吗?如果这是不可能的,那为什么?

0 投票
2 回答
2326 浏览

c++ - GDB strace 显示它试图在无效地址处进行 ptrace

我在gdb调试期间执行ni命令时遇到了这样的错误:

警告:
无法插入断点 0。
访问内存地址 0x3ac706a 时出错:输入/输出错误。

/lib/libc.so.6 中的 siglongjmp () 中的 0xf6fa4771

为了调查 gdb 遇到的问题,我 strace gdb 并获得这样的输出:

rt_sigprocmask(SIG_BLOCK,NULL,[RT_1],8)= 0
ptrace(PTRACE_PEEKTEXT,651,0xcc4fdf60,[0x1cc4fe470])= 0
ptrace(PTRACE_PEEKTEXT,651,0xcc4fe480,[0x3ac706a4506fa1d])= 0
rt_sigproc1(SIG ], 8) = 0
...<br> ...
rt_sigprocmask(SIG_BLOCK, NULL, [RT_1], 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [RT_1], 8) = 0
ptrace(PTRACE_GETREGS, 27781, 0, 0x7fff8990e8b0 ) = 0
ptrace(PTRACE_PEEKTEXT, 27781, 0x3ac7068, [0x28b]) = -1 EIO (输入/输出错误)
ptrace(PTRACE_PEEKTEXT, 27781, 0x3ac7068, [0x28b]) = -1 EIO (输入/输出错误)

这意味着 gdb 首先 ptrace 在内存地址0xcc4fe480并获取值0x3ac706a4506fa1d(实际上是一个 8 字节值0x03ac706a4506fa1d)。稍后它从该值的前 4 个字节中获取对齐的地址0x3ac7068,这是一个无效地址并导致 gdb 无法 ptrace。

/proc/[pid]/maps 的内容:

cbce2000-cc353000 R-XP 00000000 08:03 295479 xxx.so
cc353000-cc3f0000 - [R - P 00670000 08:03 295479 xxx.so
cc3f0000-cc3f6000 RW-P 0070d000 08:03 295479 xxx.so
cc3f6000-cc3fe000 RW-P cc3f6000 00:00 0
cc3fe000-cc3ff000 --- p cc3fe000 00:00 0
cc3ff000-cc4ff000 rwxp cc3ff000 00:00 0
cc4ff000-cc500000 --- p cc4ff000 00:00 0

cc500000-cc600000 rwxp cc500000 00:00 0
cc62d000-cc673000ř -xp 00000000 08:03 295545 yyy.so
cc673000-cc674000 ---p 00046000 08:03 295545 yyy.so
cc674000-cc675000 r--p 00046000 08:03 295545 yyy。
cc675000-cc676000 rw-p 00047000 08:03 295545 yyy.so

它表明地址0xcc4fe480来自上面的粗体部分。本节与任何 .so 或 bin 文件无关。

这个问题其实和另一个问题http://stackoverflow.com/questions/9564417/gdb-cant-insert-internal-breakpoint有关,这个问题还没有解决。我在调查上一期时发现了这些问题。

我在这里有 3 个问题:
1. 在这里查看 ptrace 的 strace 输出:
ptrace(PTRACE_PEEKTEXT, 651, 0xcc4fe480, [0x3ac706a4506fa1d]) = 0
为什么最后一个参数用方括号注释?这是否意味着它代表返回值?手册页说 ptrace 应该返回为 PTRACE_PEEKTEXT 读取的单词,但它看起来 strace 输出没有遵循,所以我怀疑它在最后一个参数中显示了返回值。
2. 两个.so 之间有一个节(who 用粗体字),但不与任何inode 关联。这样的部分代表什么?
3. Gdb 从该部分读取一个字并将该字用作地址,但实际上这是一个无效地址。这种错误的可能原因是什么?

谢谢!

0 投票
2 回答
438 浏览

c - 使用 Ptrace 找出参数对系统调用的确切含义

我已经发布了以下问题,得到了解决方案并继续前进,
我正在使用 ptrace 查找传递给系统调用的所有参数。
该程序正在获取我在 ebx、ecx、edx 中的值。现在,对于一个开放的系统调用,我知道了

系统调用 5:ebx:bf9748af ecx:00008000 edx:00000000 /打开
系统调用 5:ebx:80485b3 ecx:00000242 edx:000001b6 /打开

我使用了 strace,它神奇地转换了上面的内容,如下所示:

打开(“test.txt”,O_RDONLY|O_LARGEFILE)=3
打开(“test.txt”,O_RDWR|O_CREAT|O_TRUNC,0666)=3

我该如何手动执行此操作?有什么地方可以找到 O_LARGEFILE 的值吗?
我搜索了很多并遇到了这个但它没有一切。还尝试阅读 strace 代码,但没有遇到此转换的代码。
如果有人可以帮助我,那将对我非常有帮助。另外,如果您知道这是在 strace 中写的,我想看看它。提前致谢。

0 投票
1 回答
1547 浏览

c - strace如何读取系统调用sys_open的文件名?

我正在编写一个使用 Ptrace 并执行以下操作的程序:

  • 它读取当前的 eax 并检查系统调用是否为 sys_open。
  • 如果是,那么我需要知道传递的参数是什么。

    int sys_open(const char * filename, const int mode, const int mask)

所以 eax = 5 意味着它是一个开放的系统调用
我知道 ebx 有这个问题的文件位置的地址 但是我怎么知道文件名的长度以便我可以读取该位置的内容?
我遇到了以下问题,这些问题解决了相同的
问题 1
问题 2(这只是我的问题!)
但我仍然没有解决我的问题。:( 因为两个答案都不清楚。当我尝试问题 1 中的方法时,我仍然遇到分段错误
你可以在这里
检查我的代码 所以现在我真的想知道 strace 如何如此精美地提取这些值:(