Разбор EXE-header

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Apocalypse, 3 Aug 2007.

  1. Apocalypse

    Apocalypse New Member

    Joined:
    30 Jul 2007
    Messages:
    0
    Likes Received:
    4
    Reputations:
    0
    Нужен совет, а точнее код для Дельфей, результатом которого будет определен есть ли оверлей у экзешника или нет...ведь можно как то узнать размер экзешника через его заголовок, а потом уже после этого размера может быть искомый оверлей...
     
  2. drmist

    drmist Member

    Joined:
    8 Oct 2005
    Messages:
    307
    Likes Received:
    94
    Reputations:
    80
    Apocalypse
    Вам на wasm.ru, раздел "Статьи"
     
  3. Apocalypse

    Apocalypse New Member

    Joined:
    30 Jul 2007
    Messages:
    0
    Likes Received:
    4
    Reputations:
    0
    Я конечно все понимаю, но там все на асме =(
    В котором я даже образно ничего не представляю...
     
  4. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    Windows.pas :
    IMAGE_FILE_RELOCS_STRIPPED
    IMAGE_DIRECTORY_ENTRY_BASERELOC
     
  5. Apocalypse

    Apocalypse New Member

    Joined:
    30 Jul 2007
    Messages:
    0
    Likes Received:
    4
    Reputations:
    0
    хм...не совсем ясно, хочется увидеть готовый исходник либо ссылку на него...интересует мнение хорошего эксперта в этой области, может кто-то уже занимался подобным?
     
  6. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    400
    Likes Received:
    153
    Reputations:
    48
    кури док по пеформату)))
    Code:
    PE:=CreateFile(PChar(F_PEFilePath),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    MEMSZ:=GetFileSize(PE,nil);
    FM:=CreateFileMapping(PE, nil,PAGE_READONLY, 0, MEMSZ, nil);
    MEMPTR:=MapViewOfFile(FM,FILE_MAP_READ, 0, 0, MEMSZ);
    ...
    Secmax:=nt.FileHeader.NumberOfSections;
    Sec:=PSection(SectionList[Secmax]); - посл. секция
    Sec.physical_size + Sec.physical_offs - получаем конец файла =)))
    ...
    If MEMSZ>(Sec.physical_size + Sec.physical_offs) then
    попали сюда, значит есть оверлей, делаем что нада)))
    
    >> Windows.pas :
    >> IMAGE_FILE_RELOCS_STRIPPED
    >> IMAGE_DIRECTORY_ENTRY_BASERELOC

    чел про оверлей спрашивал, а не про релоки...

    з.ы. пример простой, тут не учитывается выравнивание файла, нету проверок, нет получения
    секция, но общий смысл должен быть ясен...