c++ - 如何从 .NET 可执行文件中读取 CLI 标头?(在 C++ 中)
问题描述
我正在尝试从用 C#、C++ 编码的可执行文件读取 CLI 标头(也称为 COR20 结构)以查看其内容。
这就是我一直在尝试做的,并且“Header”结构本身具有错误的值:“cb”属性应始终为 0x48,但在我的情况下,它的值要高得多,暗示我正在投射错误的数据在其中,因此我没有在其中投射 CLI 标头的数据。
这是代码:
HANDLE fHandle = CreateFileA("C:\\Users\\MyUser\\OneDrive\\Documenti\\Desktop\\schifo\\Test2Lol.exe",
GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
DWORD fSize = GetFileSize(fHandle, 0);
BYTE* fBuffer = (BYTE*)VirtualAlloc(0, fSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
ReadFile(fHandle, fBuffer, fSize, 0, 0);
PIMAGE_DOS_HEADER Dos = (PIMAGE_DOS_HEADER)fBuffer;
PIMAGE_NT_HEADERS Nt = (PIMAGE_NT_HEADERS)(fBuffer + Dos->e_lfanew);
PIMAGE_OPTIONAL_HEADER Opt = &Nt->OptionalHeader;
PIMAGE_FILE_HEADER File = &Nt->FileHeader;
PIMAGE_DATA_DIRECTORY CLRLocation = &Opt->DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR];
PIMAGE_SECTION_HEADER Current = IMAGE_FIRST_SECTION(Nt);
PIMAGE_SECTION_HEADER CLR = 0;
for (int i = File->NumberOfSections; i != 0; i--, Current++)
{
if (Current->VirtualAddress = CLRLocation->VirtualAddress && Current->VirtualAddress + Current->SizeOfRawData > CLRLocation->VirtualAddress)
CLR = Current;
}
PIMAGE_COR20_HEADER Header = (PIMAGE_COR20_HEADER)CLR;
return 0;
我的目标是在可执行文件中找到 CLI 标头,而代码内部的方式不是正确的方式,而且我在互联网上找不到太多。