Вот решил разобраться с данным фарматоми наступил на грабли мож кто объяснить есть прога Код (Text): #define pointPE(a) (*(DWORD*)(a+0x3c)+a) #define pIM_OPT_H(p) ((BYTE*)(pointPE(p)+0x18)) #define pDATADIRECTORY(p) (DWORD*)(pIM_OPT_H(p)+0x60) #define xImageBase(p) (*(DWORD*)(pIM_OPT_H(p)+0x1C)) main() { PTSTR CommandLine; CommandLine=GetCommandLine(); int i=0; while (CommandLine[i]!=' ') i++; CommandLine=CommandLine+i+1; char Buffer[255]; lstrcpy(Buffer,CommandLine); printf(Buffer); HANDLE hFile=CreateFile(Buffer,GENERIC_WRITE | GENERIC_READ,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if (hFile==INVALID_HANDLE_VALUE){printf("ASS");ExitProcess(0);} HANDLE hMapping=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL); HANDLE hMap=MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0); DWORD* aaa=(DWORD*)pDATADIRECTORY((long)hMap); DWORD pExport=aaa[0]+xImageBase((long)hMap); printf(" IMAGE %X\n",xImageBase((long)hMap)); printf(" pExport %X\n",pExport); DWORD nameRVA= *(DWORD*)(pExport + 0xC); printf("nameRVA %X",nameRVA); UnmapViewOfFile(hMap); CloseHandle(hMapping); CloseHandle(hFile); } Так вроде мне казалось что в nameRVA дожно быть RVA относительно ImageBase в которой храниться Name из структуры IMAGE_EXPORT_DIRECTORY но вот он мне что то какуюто ерунду выдает. Сильно не пенайте я только учусь. За ранее благодарю.
Первое что заметил - ты мапишь файл как он есть на диске. Поэтому RVA перед использованием надо переводить в физ смещение. Но проще отмапить файл таким образом, тогда ничего переводить не придётся. CreateFileMapping(hFile,NULL,PAGE_READWRITE | SEC_IMAGE,0,0,NULL); + отладчик в руки и смотрим чему равны переменные после каждой из этих строчек DWORD* aaa=(DWORD*)pDATADIRECTORY((long)hMap); DWORD pExport=aaa[0]+xImageBase((long)hMap); DWORD nameRVA= *(DWORD*)(pExport + 0xC); и сравнивает их с тем, что там должно появиться(определить проще с помощью PeTools)
Просмотрел в xImageBase=показывает то же значение что и в опционом заголовке pExport=0x4D4000 храниться то же значение что и показывает (PE Tools) причем когда я беру адрес nameRVA то он показывет правельный адрес но вот значение по этому адресу другое такое подозрение что он показывает значение не не замепиного файла и моей проги блин я что уже совсем чтоли 0x4D4000+0xC=0x4D400C смотрю в HIEW (файл который мэп делаю) по этому адресу одно значение (то что нужно) моя же прога какуету фигню выдает в Ольки открываю моя прога.exe far.exe перехожу по адресу который мне выдает прога и там действительно уренда какаето Причем когда я проделываю тоже самое с .dll то он все нормально определяет Блин как победить данного зверя