我有两个代码样本之间,第一个是:差异文件映射和istream的二进制
//THIS CODE READS IN THE CALC.EXE BINARY INTO MEMORY BUFFER USING ISTREAM
ifstream in("notepad.exe", std::ios::binary | std::ios::ate);
int size = in.tellg();
char* buffer = new char[size];
ifstream input("calc.exe", std::ios::binary);
input.read(buffer, size);
这是第二次:
//THIS CODE GETS FILE MAPPING IMAGE OF SAME BINARY
handle = CreateFile("notepad.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
mappinghandle = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
image = (DWORD) MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
我的问题是,究竟是什么之间的区别这两种方法?如果我们忽略文件映射更好地处理的大小问题,这两个对象是否返回基本相同? image
变量不会指向与buffer
变量基本相同的东西 - 这是内存中二进制可执行文件的映像?两者之间有什么区别?
那么,你有一段时间在Linux上进行第二次编译...... – user4581301
你应该在第二个例子中添加适当的变量声明。例如, MapViewOfFile返回一个指针,将它转换为DWORD对于访问数据没有任何意义。 – zett42