gpt4 book ai didi

C、写系统调用,写int

转载 作者:太空宇宙 更新时间:2023-11-04 00:39:28 25 4
gpt4 key购买 nike

我在 Jon Erickson 的书中找到了这个来源,Hacking: The Art of Exploitation ,

userid = getuid(); // get the real user ID
// Writing data
if(write(fd, &userid, 4) == -1) // write user ID before note data
fatal("in main() while writing userid to file");
write(fd, "\n", 1); // terminate line

我试着编译这段代码,发现在我写的文件中,userid(就是我上面代码中写的)不对;他们只是写了奇怪的字符(我认为写在这里并不重要)。所以问题是我试图将 int 传递给需要 char * 的函数,因为我想写入的文件结果是错误的。

所以这是一个错误,对吧?

最佳答案

write()函数需要一个 void * 作为它的缓冲区;它写入任意二进制数据。如果需要转换为字符串,请使用 printf()

你没有显示userid的声明,但是write()行应该写成:

if (write(fd, &userid, sizeof(userid)) != sizeof(userid))

这将检测短写(不太可能成为整数类型的问题)和其他问题,并且无论 userid 的类型如何都能正常工作。因此,该行的原始版本可以说是错误的。否则,错误似乎在您的预料之中,而不是代码本身。

关于C、写系统调用,写int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com