gpt4 book ai didi

c - 在C中读取ELF文件的正确方法

转载 作者:行者123 更新时间:2023-12-03 03:41:20 25 4
gpt4 key购买 nike

第一次在这里发帖,谷歌搜索了几个小时,但没有找到任何东西。

我正在尝试编写一个客户端程序来读取不同的文件并将它们通过网络发送到服务器程序。 (用于备份目的。)

到目前为止,我已经使用 fread() 将文件放入缓冲区,其方式类似于: http://www.cplusplus.com/reference/clibrary/cstdio/fread/

它对于纯文本文件工作得很好,但是当我尝试传输可执行文件时,fread() 似乎不读取文件,只将“ELF”读入缓冲区。

我的问题是,将 ELF 文件的内容读入 C 缓冲区的正确方法是什么?

谢谢。

最佳答案

处理 ELF 文件的最佳方法是使用 ELF 库(libelf;Google 知道它),假设您可以使用它。 ELF 文件具有复杂的结构,并且库通常会使处理文件变得更容易。

如果您必须使用fread(),那么只要您认识到数据充满空或零字节并且普通字符串函数无法准确处理数据,它就可以正常工作,因为数据中的零。特别是,像 printf() 这样的函数会在第一个零字节处停止打印字符串。

要通过网络备份任意文件,您只需打开文件(以二进制模式;它在 Unix 上没有危害,在 Windows 上至关重要),然后将大块读入内存并再次将其写出:

/* Copy the rest of f1 to f2 */
void fcopy(FILE *f1, FILE *f2)
{
char buffer[BUFSIZ];
size_t n;

while ((n = fread(buffer, sizeof(char), sizeof(buffer), f1)) > 0)
{
if (fwrite(buffer, sizeof(char), n, f2) != n)
err_syserr("write failed\n");
}
}

err_syserr() 函数是一个简单的错误报告函数,它报告其参数中给出的错误并添加系统错误消息 (strerror(errno) )并退出。

关于c - 在C中读取ELF文件的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6554001/

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