gpt4 book ai didi

c - 如何使用 lseek 创建有漏洞的文件?

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:33 24 4
gpt4 key购买 nike

我正在学习如何使用 lseek 在文件中创建漏洞。

这是我到目前为止编写的代码...

#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>

int main()
{
int fd;
char name[20] = "Harry Potter";

// Creating a file
if( (fd = open( "book.txt", O_RDWR | O_CREAT , S_IWRITE | S_IREAD ) < 0 )) {
printf("\ncreat error");
}

// Seeking 100th byte, from the begining of the file
if ( lseek(fd, 100, SEEK_SET) == -1 ) {
if (errno != 0) {
perror("lseek");
}
}

// Writing to the 100th byte, thereby creating a hole
if( write(fd, name, sizeof(char)*strlen(name)) != sizeof(char)*strlen(name) ) {
if (errno != 0) {
perror("write");
}
}

// closing the file
if ( close(fd) == -1 ) {
if (errno != 0)
perror("close");
}

return 0;
}

当我编译和执行这段代码时,我得到了一个 lseek 错误,而且名字“Harry Potter”也没有被插入到文件中。这是我执行上面代码时的输出:

lseek: Illegal seek
Harry Potter

我什至试图捕捉所有错误。请进一步帮助我。

最佳答案

if( (fd = open( "book.txt", O_RDWR | O_CREAT , S_IWRITE | S_IREAD ) < 0 )) {

如果打开成功则将 fd 设置为 0,如果打开失败则设置为 1。因为您将它设置为 0,这是您的控制台,所以它写了“Harry Potter”,而不是写入磁盘。而且你不能在终端上搜索。你要

if( (fd = open( "book.txt", O_RDWR | O_CREAT , S_IWRITE | S_IREAD )) < 0 ) {

还有

a) 系统调用失败后无需检查 errno != 0。

b) 你应该在出错时退出而不是失败。

c) sizeof(char) 始终为 1,因此无需乘以它。

d) main 应该有一个原型(prototype),例如,int main(void)

关于c - 如何使用 lseek 创建有漏洞的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25306102/

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