Приветствую всех! Я хотел бы узнать, из-за чего происходит отличие в значениях. При получение NumberOfFunctions при помощи этого кода
Я получаю вот такой результат:
PE-Bear отображает мне совершенно другой результат
Из-за чего такое может происходить ? Буду рад любой помощи.Заранее спасибо
C++:
std::ifstream inputFile("C:\\Windows\\System32\\kernel32.dll", std::ios_base::binary);
inputFile.seekg(0, std::ios_base::end);
auto length = inputFile.tellg();
inputFile.seekg(0, std::ios_base::beg);
std::vector<BYTE> buffer(length);
inputFile.read(reinterpret_cast<char*>(buffer.data()), length);
std::cout << std::hex << buffer.data() << std::endl;
PBYTE pBaseAddrDll = buffer.data();
IMAGE_DOS_HEADER pBaseDosHdrDll = *reinterpret_cast<PIMAGE_DOS_HEADER>(pBaseAddrDll);
if (pBaseDosHdrDll.e_magic != IMAGE_DOS_SIGNATURE)
{
std::cout << "Incorrect DLL loaded" << std::endl;
return -1;
}
PIMAGE_NT_HEADERS ntHeaderDll = reinterpret_cast<PIMAGE_NT_HEADERS>
( reinterpret_cast<PBYTE>(pBaseAddrDll) + pBaseDosHdrDll.e_lfanew) ;
if (ntHeaderDll->Signature != IMAGE_NT_SIGNATURE)
{
std::cout << "Incorrect DLL loaded" << std::endl;
return -1;
}
IMAGE_DATA_DIRECTORY exportDirectoryTable =
ntHeaderDll->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
PIMAGE_EXPORT_DIRECTORY exportDirectory =
reinterpret_cast<PIMAGE_EXPORT_DIRECTORY>(
reinterpret_cast<PBYTE>(pBaseAddrDll) + exportDirectoryTable.VirtualAddress
);
std::cout << "number of functions " << exportDirectory->NumberOfFunctions << std::endl;
std::cout << "base " << exportDirectory->Base << std::endl;
std::cout << "Name: " << reinterpret_cast<char*>(reinterpret_cast<PBYTE>(pBaseAddrDll) + exportDirectory->Name) << std::endl;
Я получаю вот такой результат:
Код:
number of functions: 687
number of names: 687
Base: 1
Name: KERNEL32.dll
PE-Bear отображает мне совершенно другой результат
Из-за чего такое может происходить ? Буду рад любой помощи.Заранее спасибо