标签: strace

strace 是找出程序写入文件系统位置的合适工具吗?

我想确定某个应用程序(例如,surf)写入文件系统的位置,以确保它不留下任何痕迹。如果没有专用的沙箱系统,这可能并不容易,但我想知道是否有比简单地使用strace.

例如,这里有一个简单的脚本,名为run

#!/bin/bash

mkdir history
echo foo bar > history/hist.db
echo hello > test
Run Code Online (Sandbox Code Playgroud)

strace是这样跑的:

strace ./run 2>&1 | sed -n '/^open.*WRONLY/p' | sed 's/.*"\(.*\)"[^"]*$/\1/'
Run Code Online (Sandbox Code Playgroud)

查看已写入的所有文件(但不是目录)(我认为这不会捕获已创建但未写入的文件,例如由touch.创建的文件)。输出:

history/hist.db
test
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,因为这对于除微不足道的应用程序之外的任何东西都变得笨拙,或者我可以传递给strace(或更好的正则表达式?)我是否会冒丢失写入文件系统的文件的风险?

filesystems security sed strace sandbox

5
推荐指数
1
解决办法
406
查看次数

Grepping strace 输出变得困难

我编写了以下代码来确定程序写入哪些文件。我当然想捕获文件名。

strace -f -t -e trace=file -p 8804 2>&1 | grep -oP "\"(.*)\".*O_WRONLY"
Run Code Online (Sandbox Code Playgroud)

这输出类似

/tmp/11111111.txt", O_WRONLY
Run Code Online (Sandbox Code Playgroud)

问题是我无法将所有这些输出传递给任何命令

strace -f -t -e trace=file -p 8804 2>&1 | grep -oP "\"(.*)\".*O_WRONLY" | echo
# does not show anything
Run Code Online (Sandbox Code Playgroud)

而且我无法保存所有这些的输出以供以后使用:

strace -f -t -e trace=file -p 8804 2>&1 | grep -oP "\"(.*)\".*O_WRONLY" > asd.out
# file is empty
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。:)

grep pipe strace

5
推荐指数
1
解决办法
4020
查看次数

调试内核关闭?

我在 Linux 4.2.0 上,Ubuntu 14.04 的 Ubuntu Wily HWE 内核(我正在运行)。

在 MacBook 11,4 和 11,5 型号上有一个令人讨厌的错误,其中笔记本电脑实际上永远不会关闭,它们似乎到达Power down内核消息然后只是挂起而从未关闭。此错误也可能会阻止挂起和恢复。有趣的是,它不会在reboot被调用时表现出来,只有在试图停止机器时才会表现出来。

细节不那么重要,但什么相关的是我怎么能调试这一点。有没有办法strace在内核关闭时调试或调试内核并以某种方式观察输出?我相当肯定,断电逻辑正在执行一个永远挂起的系统调用,并且由于某些奇怪的原因而没有返回。如果我能找出哪个系统调用不工作,我就可以继续找出它不工作的原因,以及具体是什么硬件导致关机失败。

是否有调试内核关闭的标准做法?我需要特殊的硬件吗?我很好地为内核编写补丁,但我什至不知道从哪里开始寻找这个问题,除非我能找到不起作用的系统调用。

linux debugging strace

4
推荐指数
1
解决办法
2652
查看次数

Strace 系统调用类

Strace 允许

strace -e trace=$some_class 
Run Code Online (Sandbox Code Playgroud)

指定要跟踪的系统调用类。

例如,

 strace -e trace=file 
Run Code Online (Sandbox Code Playgroud)

应该跟踪所有与文件相关的系统调用。

我怎样才能找出这些究竟是哪些?我想获得属于file该类的系统调用的完整列表。

strace

4
推荐指数
1
解决办法
475
查看次数

将 `strace` 输出写入文件

我正在尝试将 的输出写入strace ls文件。我知道我需要使用>才能将命令的输出转发到文件,但它不起作用。它创建一个文件,但该命令将输出打印strace ls到标准输出,但将文件名写入文件。

$ strace ls > ls_sys.txt
...
strace output
...
$ cat ls_sys.txt
ls_sys.txt
Run Code Online (Sandbox Code Playgroud)

pipe files strace

4
推荐指数
1
解决办法
5251
查看次数

我不应该跟踪哪些进程?

我创建了一个小函数,用于strace按名称 'ing 一组当前用户的进程:

function pstrace() {
    local pattern="$1";
    shift;
    prefixDashP $(pgrep -U $(whoami) $pattern) | xargs strace -o /dev/stdout $@;
}

function prefixDashP() {
    local new_args=();
    for arg; do
        new_args+=( '-p' );
        new_args+=( "$arg" );
    done;
    for arg in "${new_args[@]}"; do
        echo "$arg";
    done;
}

# Usage:  pstrace pattern1 pattern2 ...
Run Code Online (Sandbox Code Playgroud)

问题是,如果我不小心指定了太宽泛的模式,它会尝试监视它不应该监视的进程,因此我的系统会冻结。

是否有我可以随时排除的进程列表?

process strace

3
推荐指数
1
解决办法
1259
查看次数

Strace 输出未显示系统调用

我正在阅读coreutils的源代码,我是来阅读tty.c代码的。主要功能tty如下:

int
main (int argc, char **argv)
{
  char *tty;
  int optc;

  initialize_main (&argc, &argv);
  set_program_name (argv[0]);
  setlocale (LC_ALL, "");
  bindtextdomain (PACKAGE, LOCALEDIR);
  textdomain (PACKAGE);

  initialize_exit_failure (TTY_WRITE_ERROR);
  atexit (close_stdout);

  silent = false;

  while ((optc = getopt_long (argc, argv, "s", longopts, NULL)) != -1)
    {
      switch (optc)
        {
        case 's':
          silent = true;
          break;

        case_GETOPT_HELP_CHAR;

        case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);

        default:
          usage (TTY_FAILURE);
        }
    }

  if (optind < argc)
    error (0, 0, _("extra operand %s"), quote (argv[optind]));

  tty = …
Run Code Online (Sandbox Code Playgroud)

tty strace

3
推荐指数
1
解决办法
2259
查看次数

strace -p 带有上下文/历史记录的行数

我想要strace一个正在运行的进程,我知道我可以用它来做strace -p <pid>,但我相信这个进程已经挂在了一些阻塞调用上,例如sem_wait()在一个从未发布过的信号量上等等,并且输出strace只有一行,比如:

Process 195 attached - interrupt to quit
poll([{fd=3, events=POLLIN}, {fd=6, events=POLLIN}], 2, 3600000^C <unfinished ...>
Run Code Online (Sandbox Code Playgroud)

是否可以指定strace输出更多行的上下文/历史?我猜不是,因为我猜是strace实时输出和每个函数/指令,但我想我会要求确认。

strace

3
推荐指数
1
解决办法
1037
查看次数

系统调用读取的缓冲区使用的地址格式是什么?

我正在使用 strace,出现以下行:

读(3,“\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\320\3 \2\0\0\0\0\0@\0\0\0\0\0\00P\265\31\0\0\0\0\0\0\0\0\0@\0008 \0\n\0@\0G\0F\0\6\0\0\0\5\0\0\0@\0\0\0\0\0\0\@\0\0\0 \0\0\0\0@\0\0\0\0\0\0\0000\2\0\0\0\0\0\0000\2\0\0\0\0\0\ 0\10\0\0\0\0\0\0"..., 832) = 832

第二个参数的格式是什么?那些 0、@ 和 \ 是什么?

我正在使用 Debian,搭配 Intel i5 CPU x86_64。

linux system-calls strace

3
推荐指数
1
解决办法
304
查看次数

strace 除指定的系统调用外的所有系统调用

我怎样才能运行strace和记录系统调用的所有内容,但不能read和不能write

system-calls strace

3
推荐指数
1
解决办法
122
查看次数

标签 统计

strace ×10

linux ×2

pipe ×2

system-calls ×2

debugging ×1

files ×1

filesystems ×1

grep ×1

process ×1

sandbox ×1

security ×1

sed ×1

tty ×1