【发布时间】:2012-07-01 00:26:33
【问题描述】:
我正在尝试读取文件,然后以 ASCII 或 HEX 格式将文件显示到 hEdit 中。最终我将对文件信息进行其他计算,但现在我只想查看所有内容。
当前代码显示第一位 - “MZ” - 仅此而已。不知何故,我不小心截断了 pszFileText 变量,我希望能够在我的窗口中查看整个可执行文件。
BOOL ReadInEXEFile(HWND hEdit, LPCTSTR pszFileName)
{
HANDLE hFile;
BOOL bSuccess = FALSE;
hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD dwFileSize;
dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize != 0xFFFFFFFF)
{
LPSTR pszFileText;
pszFileText = GlobalAlloc(GPTR, dwFileSize + 1);
if(pszFileText != NULL)
{
DWORD dwRead;
if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
{
pszFileText[dwFileSize] = 0; // Add null terminator
if(SetWindowText(hEdit, pszFileText))
{
bSuccess = TRUE; // It worked!
}
}
GlobalFree(pszFileText);
}
}
CloseHandle(hFile);
}
return bSuccess;
}
【问题讨论】:
-
您将文件内容作为零终止字符串传递给编辑控件。这意味着如果文件中间某处有一个零,它将在那里终止。因此,显然我们的文件在
"MZ"之后的位置为零。当您将 binary 文件解释为以零结尾的字符串时,这基本上是您应该期待的。 -
无论如何,为什么你要在 binary 文件上测试你的代码???它显然只适用于 text 文件。
-
我希望能够分析可执行文件。这就是我发现如何在 win32 gui 中读取文件的方式,所以这就是我试图增强以能够用于 exe 的方式。
-
好吧,您将无法通过将可执行文件视为编辑控件中的文本来“分析它们”。
-
您不需要显示数据来分析它。这是两个独立的操作。您可以直接在代码中按原样分析原始二进制数据,但如果要显示,则必须对数据进行编码。
标签: c winapi executable readfile