小编MLA*_*ion的帖子

为什么strace打开,读取512字节,然后fstat libncurses?

我有以下 strace 输出,我正在通过这些输出自学更多关于程序流程的知识。这是让我困惑的部分:

16:08:02 open("/lib/libncurses.so.5", O_RDONLY) = 3 <0.000046>
16:08:02 read(3, "\x7f\"..., 512) = 512 <0.000048>
16:08:02 fstat64(3, {st_dev=makedev(202, 0), st_ino=16548, st_mode=S_IFREG|0644, st_nlink=1, st_uid=0, st_gid=0, st_blksize=4096, st_blocks=464, st_size=231576, st_atime=2011/02/06-15:37:43, st_mtime=2011/01/04-06:05:23, st_ctime=2011/02/06-15:37:43}) = 0 <0.000038>
Run Code Online (Sandbox Code Playgroud)

通过读取前 512 个字节获得了什么?似乎这种模式在共享库中很常见。

更新:我刚刚得到了一个很好的答案,澄清了 512 字节的长度。具体来自 elf/dl-load.c 中的评论:

ELF 标头 32 位文件的长度为 52 字节,而 64 位文件的长度为 64 字节。每个程序头条目的长度分别为 32 和 56 字节。即,即使文件有 10 个程序头条目,我们也只需要分别读取 372B/624B。为程序注释添加一点余量,分别读取 32 位和 64 位文件的 512B 和 832B 就足够了。

linux debug debian strace

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

标签 统计

debian ×1

debug ×1

linux ×1

strace ×1