На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Проверка PE-формата , Проверка IMAGE_DOS_SIGNATURE
    Прога должна проверять является данный файл PE-файлом. Использую следующий код:
    [code]
    HANDLE File = CreateFile("c:\\3.exe", GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //Открываем файл
    HANDLE Mapping = CreateFileMapping( File,0,PAGE_READONLY,0,0,0 ); //Создаем адресное пространство из файла
    LPVOID WinINI = MapViewOfFile( Mapping,FILE_MAP_READ,0,0,0 ); //Резервируем регион
    if((char*)WinINI==IMAGE_DOS_SIGNATURE)MessageBox(NULL,"ДОС заголовк верный","Проверка",MB_ICONINFORMATION); <-----Я вообще переделываю исходник с асмы на C++. И вот не могу понять как организовать проверку :-( По идеи WinINI в данный момент это указатель на начало файла.


    UnmapViewOfFile(WinINI);
    CloseHandle(Mapping);
    CloseHandle(File);
    [\code]
    По идее если DOS-заголовок верный, то используем значение параметра e_lfanew, чтобы найти PE-заголовок, т.е в нем хранится смещение PE-заголовка от начала файла. Вопрос: как узнать значение e_lfanew.

    Большое спасибо...
      Верная сигнатура, вроде как, в досе была из двух букв. Да еще и в двух вариантах: 'MZ' и 'ZM', но про второй "забыли" smile.gif

      LPVOID WinINI = MapViewOfFile( Mapping,FILE_MAP_READ,0,0,0 );
      if( ((PIMAGE_DOS_HEADER)WinINI)->e_magic == IMAGE_DOS_SIGNATURE)
      {
          ((PIMAGE_DOS_HEADER)WinINI)->e_lfanew что-то делаем...
      }
      Сообщение отредактировано: Visitor -
        А каким образо в один экзешник зашивают два? Вернее зашить то не проблема, а как сделать чтобы два файла запустились?
        Спасибо...
          А таким, что загрузчик Win32, ПЕРЕД тем как запустить DOS-программу, смотрит, а не лежит ли по смещению e_lfanew правильный заголовок PE(NE). И если лежит, то загружает его...
            Все спасибо уже понял. Можно просто еще добавить свою секцию и сменить адресс EntryPoint и все будет OK.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0267 ]   [ 16 queries used ]   [ Generated: 7.05.24, 11:47 GMT ]