【问题标题】:strace output problems solvestrace输出问题解决
【发布时间】:2013-10-30 19:09:52
【问题描述】:

我尝试在 linux 中为我的程序运行 strace。

这是示例输出:

brk(0)                                  = 0x804b000
brk(0x806c000)                          = 0x806c000
open("test.txt", O_RDONLY)              = 3
fstat64(3, {st_mode=S_IFREG|0600, st_size=216, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7728000
read(3, "10\n10\n2\t3\t3\t5\t4\t7\t7\t2\t2\t7\t\n8\t3\t1"..., 4096) = 216
read(3, "", 4096)                       = 0
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0xb7728000, 4096)                = 0
**open(NULL, O_RDONLY)                    = -1 EFAULT (Bad address)**
dup(2)                                  = 3
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fstat64(3, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7728000
**_llseek(3, 0, 0xbfc97a44, SEEK_CUR)     = -1 ESPIPE (Illegal seek)**
write(3, "Can't open file!: Bad address\n", 30Can't open file!: Bad address

为什么我在这两行中遇到一些错误。 **open(NULL, O_RDONLY)** 是什么意思?

【问题讨论】:

  • RTFM : man 2 open =)
  • 您正在打开一个名称为 NULL 的文件。至少包含变量的文件名是 NULL

标签: linux strace


【解决方案1】:
**open(NULL, O_RDONLY)  

您将 NULL 字符串作为文件名传递。根据documentation,当路径名指向您可访问的地址空间之外时,会生成EFAULT。

_llseek(3, 0, 0xbfc97a44, SEEK_CUR)

您正在尝试设置不支持此功能的文件描述符的偏移量。

实际上,您正在尝试移动 STANDARD ERROR 的偏移量(3 是 dup(2) 的结果),这没有意义,因为它不是真实文件。根据documentation,ESPIPE 是在文件描述符与管道、套接字或 FIFO 关联时生成的。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2023-03-18
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多