【发布时间】:2021-02-15 16:52:13
【问题描述】:
好吧,这个问题不正常,而且可能很愚蠢,因为我不熟悉 c++ 中的指针和链接:
所以我在另一个进程 (http://prntscr.com/zmfb4p) 的内存中有一些数据,大约 1200-1600 字节。 我有一个驱动程序,它可以对需要的进程进行内核读写。 我有一个用户模式应用程序,它与驱动程序的通信方式如下:
int reading_data = driver.readvirtualmemory<int>(<processId>, <adress to read>, <size to read>);
它适用于小数据类型,但我不明白如何获取“大量”字节并存储它:
分配内存来存储数据:
char* test_buf = new char[size_matricies_buffer]; // allocating memory and creating a pointer to it ~1200-1600 depends on situation
*test_buf = driver.ReadVirtualMemory<char>(<process>, <address>, static_cast<uint32_t>(size_matricies_buffer)); // filling allocated memory with data?
它可以编译并且可以工作,但是当我尝试访问 *test 时出现错误:
cout << "buf: " << *test_buf << " | " << &test_buf << endl;
Mysoftware.exe 中 0x00007FF6D1DD1671 处未处理的异常:0xC0000005:访问冲突写入位置 0x00000000C21C833C。
知道我在这里缺少什么吗?
【问题讨论】:
-
违规写入位置 0x00000000C21C833C 您的操作系统说您尝试写入数据。我不确定错误是否来自显示的行。
-
分配内存然后读取一个块并返回一些内容并将其放入
char是没有意义的。ReadVirtualMemory到底是做什么的?为什么不给它一个缓冲区来复制数据呢? -
是的,也许我很困惑,因为 *test_buf = driver.
在我运行解决方案时由 VS 完成。 -
这个函数没有意义,因为它返回一个 int? Int 是 4 个字节,所以如果我让函数读取 5 个字节会发生什么,它如何返回额外的字节?
-
在
cout << "buf: " << *test_buf中,*test_buf很可能不是以空字符结尾的字符串。虽然我希望Access violation reading location而不是Access violation writing location
标签: c++ memory-management read-write