我在 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/