带参数的读取和系统调用的含义
Meaning of read and syscall with arguments
我正在使用 strace 和 ltrace 工具获取有关包含用户输入提示的程序的信息。
有了strace,调用read from the prompt后,在readOnly中有一个特定文件的openat:
openat(AT_FDCWD, "file", O_RDONLY) = 3
read(3, "22d72c", 6) = 6
我知道 read 的第二个参数应该是一个缓冲区,并且读取从缓冲区开始,但它在这里到底是什么意思?这是否意味着它从 22d72c 位开始?或者 22d72c 是一个键并读取它的值?
至于系统调用,当我使用 ltrace 时,在对提示进行 scanf 和
fopen 打开文件,它returns 类似系统调用如:
syscall(0, 3, 0x56127f5c96c0, 6)
这里的syscall第三个参数是什么意思? (0x56127f5c96c0)
没有。 "22d72c"
是 read
从您的文件中读取的 6 个字符 ...只需检查 file
.
的开头
确实,如果您使用 read 从 STDIN_FILENO
读取(或者例如使用 fgets
;strace 将输出
read(0,
和stop在那里等待读取完成,以便它可以打印出读取的字符!
至于
syscall(0, 3, 0x56127f5c96c0, 6)
该输出来自不知道如何解码系统调用 0 (read
) 的系统调用参数的程序,因此它只显示一些合理的价值——所有的小数字都是十进制的。 0x56127f5c96c0
是指向您 read
进入的缓冲区的第一个字符的指针。
0x56127f5c96c0
是传递给read
的指针。它对你不是很有用,是吗? strace
足以解码系统调用,注意这是一个指针参数,并向您展示它指向的内容。
我正在使用 strace 和 ltrace 工具获取有关包含用户输入提示的程序的信息。
有了strace,调用read from the prompt后,在readOnly中有一个特定文件的openat:
openat(AT_FDCWD, "file", O_RDONLY) = 3
read(3, "22d72c", 6) = 6
我知道 read 的第二个参数应该是一个缓冲区,并且读取从缓冲区开始,但它在这里到底是什么意思?这是否意味着它从 22d72c 位开始?或者 22d72c 是一个键并读取它的值?
至于系统调用,当我使用 ltrace 时,在对提示进行 scanf 和 fopen 打开文件,它returns 类似系统调用如:
syscall(0, 3, 0x56127f5c96c0, 6)
这里的syscall第三个参数是什么意思? (0x56127f5c96c0)
没有。 "22d72c"
是 read
从您的文件中读取的 6 个字符 ...只需检查 file
.
确实,如果您使用 read 从 STDIN_FILENO
读取(或者例如使用 fgets
;strace 将输出
read(0,
和stop在那里等待读取完成,以便它可以打印出读取的字符!
至于
syscall(0, 3, 0x56127f5c96c0, 6)
该输出来自不知道如何解码系统调用 0 (read
) 的系统调用参数的程序,因此它只显示一些合理的价值——所有的小数字都是十进制的。 0x56127f5c96c0
是指向您 read
进入的缓冲区的第一个字符的指针。
0x56127f5c96c0
是传递给read
的指针。它对你不是很有用,是吗? strace
足以解码系统调用,注意这是一个指针参数,并向您展示它指向的内容。