[英]ReadFile not reading the bytes correctly
我正在尝试使用readfile读取文件,将其存储到一个宽数组中,然后将其写入另一个文件中。 问题是,当我将它们并排放置在HxD中时,某些字节是正确的(例如文本),但其他所有内容完全不同。 我也不能跑
struct a
{
BYTE* buff;
long siz;
};
int main()
{
HANDLE hFile;
a struct_a;
if (hFile = CreateFileW(L"C:\\Windows\\System32\\notepad.exe", GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, 0, nullptr))
{
long lFileSize = GetFileSize(hFile, nullptr);
if (lFileSize)
{
struct_a.siz = lFileSize;
struct_a.buff = new BYTE[struct_a.siz];
if (ReadFile(hFile, struct_a.buff, struct_a.siz,
nullptr, nullptr))
{
CloseHandle(hFile);
}
}
}
HANDLE h = CreateFileA("C:\\Users\\USER\\Desktop\\notepad_new.exe", GENERIC_WRITE, FILE_SHARE_WRITE, nullptr,
CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr);
WriteFile(h, struct_a.buff, struct_a.siz, nullptr, nullptr);
return 0;
}
我希望它能够正确读取文件,然后将其写入并让我能够运行它。
另外,在读取文件后,我还尝试在文件末尾写一些字节
struct_a.buff[struct_a.siz - 5] = L'A';
但它从未出现在任何地方。 但是,当我尝试在一开始编写它(除去括号)时,它写得很好。
编辑:我尝试之后再阅读它,它足够奇怪地阅读正确的字母
屏幕截图中的左侧文件是32位EXE文件。 您突出显示的字节与文件中IMAGE_NT_HEADERS结构的地址不同。
在地址0xFC处,此结构中有4个字节,这2个字节是4C01。这是IMAGE_FILE_HEADERS中的Machine字段,并且该值指示该机器是“ i386”(即32位程序)。
在正确的文件中,地址改为0xEC,字节为64 86,即“ AMD64”(即,这是一个64位程序)。
您的程序可能是32位程序,由于Windows称为文件系统重定向的功能 (感谢Paul Sanders提供了链接),因此它可以访问System32的32位版本。 在64位Windows上,根据此表,将32位程序的System32重定向到另一个文件夹(实际上称为SysWOW64):
32-bit System32 64-bit System32
32-bit program C:\Windows\System32 C:\Windows\sysnative
64-bit program C:\Windows\SysWOW64 C:\Windows\System32
您可以通过从sysnative读取notepad.exe或将其与SysWOW64中的内容而不是System32中的内容进行比较,或通过将程序编译为64位来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.