gpt4 book ai didi

c++ - 为什么 fwrite 向我抛出访问冲突?

转载 作者:行者123 更新时间:2023-12-02 08:02:04 28 4
gpt4 key购买 nike

我正在重新编译和调试 Yara,但由于某种原因,当 Yara 的 yr_rules_save 时会引发访问冲突。函数尝试执行 hdr 的 fwrite结构到文件中。

typedef struct _YR_STREAM
{
void* user_data;

YR_STREAM_READ_FUNC read;
YR_STREAM_WRITE_FUNC write;

} YR_STREAM;

typedef size_t (*YR_STREAM_WRITE_FUNC)(
const void* ptr,
size_t size,
size_t count,
void* user_data);

YR_API int yr_rules_save(
YR_RULES* rules,
const char* filename)
{
int result;

YR_STREAM stream;
FILE* fh = fopen(filename, "wb");

if (fh == NULL)
return ERROR_COULD_NOT_OPEN_FILE;

stream.user_data = fh;
stream.write = (YR_STREAM_WRITE_FUNC) fwrite; // As write method, uses fwrite

result = yr_rules_save_stream(rules, &stream); // Here the error

fclose(fh);
return result;
}
事实上,如果我们进入 yr_rules_save_stream在显示的函数中,是抛出异常的行:
  [...]
if (yr_stream_write(&hdr, sizeof(hdr), 1, stream) != 1)
return ERROR_WRITING_FILE;
[...]
有什么异常(exception):
Exception thrown at 0x00007FFED05072A6 (ntdll.dll) in ubi-yarac64.exe: 0xC0000005: Access violation writing location 0x00007FF653018A46.
有关行和调用堆栈等详细信息,请查看屏幕截图。
该文件未锁定(没有软件使用它),它不存在(即使我在 fopen 上放置了“w+b”)并且如果我手动检查 HxD,指向缓冲区的指针似乎存在。
有人知道这里发生了什么吗?
The error shown from Visual Studio

最佳答案

原因是,因为 YR_STREAM_WRITE_FUNC 包裹的 fwrite 函数接受一个指向 FILE 的指针输入,而在函数 yr_stream_write它传递一个指向 YR_STREAM 的指针结构而不是 YR_STREAM->user_data (FILE 之前由 yr_rules_save 保存的句柄)
the f. solution

关于c++ - 为什么 fwrite 向我抛出访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63507972/

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