Каким образом можно считать данные (найти последовательность байт) с exeшника, промэппированного в память? Запускать процесс нежелательно. Пытаюсь выделить память alloc'om под буфер и скопировать в него нужную часть файла (секцию .text) memcpy для дальнейшей работы, но чёт не работает... В буфер пишется мусор или вообщем ничего не пишется
зачем дополнительно выделять/копировать память под файл, если файл уже спроецирован в память? просто сканируй память на наличие нужных байт и всё.
Возможно, имелось ввиду (магический шар треснул, поэтому могу ошибаться), что была вызвана только CreateFileMapping без MapViewOfFile. И как результат - мусор. Иначе, дополнительный буфер действительно не нужен. Еще, как вариант (определил по звездам), были спутаны физ. и вирт. смещения. 3-й вариант (гадал на кофейной гуще): файл закриптован, оттого и мусор.
Код (Text): PBYTE mapping; char *file = "file.exe"; HANDLE pFile, pMap; pFile = CreateFile(file, GENERIC_WRITE|GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); pMap = CreateFileMapping(pFile, 0, PAGE_READWRITE, 0, GetFileSize(pFile, 0), 0); mapping = (PBYTE)MapViewOfFile(pMap, FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, GetFileSize(pFile, 0)); PIMAGE_DOS_HEADER dos = (PIMAGE_DOS_HEADER)mapping; PIMAGE_NT_HEADERS nt = (PIMAGE_NT_HEADERS)(mapping + dos->e_lfanew); PIMAGE_SECTION_HEADER section = (PIMAGE_SECTION_HEADER)((DWORD)nt + sizeof(IMAGE_NT_HEADERS)); PBYTE massiv = (PBYTE)malloc(section->SizeOfRawData); memcpy(&massiv, &dos + section->PointerToRawData, section->SizeOfRawData); Ногами только сильно не пинайте...
Спасибо всем, разобрался... ) кстати, обратил внимание, что компилятор Dev-Cpp данный код несколько раз сдампил часть файла "MZ + section->SizeOfRawData", т.е. не саму секцию .text а на то, что лежало от MZ + section->SizeOfRawData, т.е. 0x200 байт от начала файла. Шайтан, однако... Затем все заработало так, как требовалось