C、写系统调用,写int

标签 c low-level

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

相关文章:

c - 我的 Makefile 总是构建所有文件

c - 为什么 WH_MOUSE 钩子(Hook)不再是全局的?

c - Union - 二进制到 double

c - 你为什么用汇编编程?

c - "Array Subscript is not an integer"c

c++ - 编译时PCAP程序错误

c - 将 2 个 32 位数字相乘并使用 AVX2 取前 32 位

c - 处理器如何读取内存?

c - 链表的二维数组

c - 无法从AVL/二叉树中删除节点(与指针混淆)