Код (Text): int _tmain(int argc, _TCHAR* argv[]) { HANDLE f=CreateFile(patch,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); HANDLE map=CreateFileMapping(f,NULL,PAGE_READWRITE | SEC_IMAGE,0,0,NULL); DWORD simpAdr=(DWORD)MapViewOfFile(map,FILE_MAP_ALL_ACCESS,0,0,0); IMAGE_NT_HEADERS *image=(IMAGE_NT_HEADERS *)(simpAdr+ ((IMAGE_DOS_HEADER*)simpAdr)->e_lfanew); char *buf=(char*)malloc(image->OptionalHeader.SizeOfImage); memcpy(buf,(void*)simpAdr,image->OptionalHeader.SizeOfImage); IMAGE_IMPORT_DESCRIPTOR *iid; iid=(IMAGE_IMPORT_DESCRIPTOR *)(simpAdr+image->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); printf("%s\n",(char*)(simpAdr+iid->Name)); UnmapViewOfFile((void*)simpAdr); DWORD testAdr=(DWORD)buf; printf("%s\n",(char*)testAdr); printf("%s\n",(char*)(testAdr+iid->Name));//вот тут ошибка чтения free(buf); CloseHandle(map); CloseHandle(f); getch(); return 0; } От чего так происходит?Какая то фишка с дефрагментацией памяти?Или не что другое?
у вас ошибка в коде, вот вы получили указатель iid отнносительно simpAddr Код (Text): iid=(IMAGE_IMPORT_DESCRIPTOR *)(simpAdr+image->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); далее вы делаете Код (Text): UnmapViewOfFile((void*)simpAdr); и читаете iid->Name Код (Text): printf("%s\n",(char*)(testAdr+iid->Name));//вот тут ошибка чтения конечно не будет работать.