Помогите разобратся в структурах PE файла

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 31 май 2010.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Код (Text):
    1.            HANDLE f=CreateFileA("C:\\windows\\notepad.exe",GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
    2.     LARGE_INTEGER SZ;
    3.     ZeroMemory(&SZ,sizeof(SZ));
    4.     GetFileSizeEx(f,&SZ);
    5.     char *buf=new char[SZ.QuadPart];
    6.     DWORD rb;
    7.     ReadFile(f,buf,SZ.QuadPart,&rb,0);
    8.     CloseHandle(f);
    9.     unsigned long offset=0;
    10.     _IMAGE_DOS_HEADER stub;
    11.     memcpy(&stub,buf,sizeof(_IMAGE_DOS_HEADER));
    12.     offset=offset+stub.e_lfanew;
    13.     buf+=stub.e_lfanew;
    14.     _IMAGE_NT_HEADERS image;
    15.     memcpy(&image,buf,sizeof(_IMAGE_NT_HEADERS ));
    16.     printf("Signature:%d|IMAGE_NT_SIGNATURE:%d",image.Signature,IMAGE_NT_SIGNATURE);//тут совершенно разные значения
    17.     delete []buf;
    Подскажите что я не так понял из этой http://www.wasm.ru/article.php?article=green2red02 статьи?
     
  2. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    _nic,

    А у меня — одинаковые. Я просто завернул это в void main() {} и включил Windows.h / stdio.h. Странно. А на скомпилированный файл глянуть можно?
     
  3. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    О_о хоть и работало без #include <stdio.h>,но действительно одинаковые значения появились только с этим инклудом.Мистика какая то.
    ЗЫ:VS 2008
     
  4. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Ещё такой вопрос- что из себя представляет DWORD AddressOfEntryPoint в _IMAGE_OPTIONAL_HEADER,что это за цифра?Это смещение внутри файла,или это смещение внутри его промапленной копии в памяти?Или это что то другое?
     
  5. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Аналогично. Закомментарил stdio.h — не компилирует.
     
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Это RVA точки входа. Добавь базу, будет адрес.
     
  7. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    _nic,

    А что показывало без stdio.h?
     
  8. VirMaker

    VirMaker New Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    20
    Уже какой раз у Вас ужасно оформленый код, когда Вы правильно оформлять свой код?
     
  9. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Да всякие произвольные значения.
    ЗЫ:а как система определяет какому приложению(консоль,гуи) принадлежит точка входа?
     
  10. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    Значение, идентифицирующее подсистему лежит в OptionalHeader.Subsystem

    Рекомендуется к прочтению

    http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx
     
  11. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Консольные это MAGE_SUBSYSTEM_NATIVE ? А что же тогда за точки входа у сервисов??
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    XXX_CUI - консолька
    PS: проверить никак?
     
  13. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    >> А что же тогда за точки входа у сервисов??

    какие точки входа? точка входа одна в OptionalHeader. Не понимаю, про какие вы сервисы (scm чтоли?)
     
  14. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Нет.Как обозначена точка входа у сервиса?
     
  15. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Речь про NT сервисы ?
     
  16. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Так же, как и у остальных исполняемых -- OptionalHeader::AddressOfEntryPoint. Точка входа одна, а экспортируемых ф-ий может быть много. Речь, наверное, про них.
     
  17. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Речь идет о том как понять,какие переменные "ожидает" точка входа.
     
  18. c4m310t

    c4m310t New Member

    Публикаций:
    0
    Регистрация:
    19 дек 2008
    Сообщения:
    237
    Переменные "ожидают" функции, которые экспортируются вашим приложением. Читайте документацию.
    К примеру это: http://www.rsdn.ru/article/baseserv/pe_coff.xml
     
  19. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Вы меня не правильно поняли.Выражусь максимально ясно.Как выяснить что нужно пихать в точку входа конкретного PE файла для его нормального запуска?
     
  20. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    это бот )))