Проверка pe на правильность

Тема в разделе "WASM.BEGINNERS", создана пользователем asd, 7 ноя 2005.

  1. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Допустим мы промапили файл размером 5 кб.

    в eax - адрес образа

    cmp [eax],'ZM'

    jnz no_pe

    mov esi,[eax+3ch]

    cmp [esi],'EP'

    а теперь представим ситуацию: у нас программа у которой первые символы mz а по смещению 3сh допустим 10000000h

    в результате esi=10000000h+eax и cmp [esi],'EP' будет обращаться к области памяти к которой нам обращаться нельзя(map образ ведь всего 5 кб) со всеми вытекающими.

    Нигде не встречал описание такого случая. По моему надо проверять перед cmp [esi],'EP' попадает ли esi в нвш map образ или нет.
     
  2. Fry Chicken

    Fry Chicken New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2005
    Сообщения:
    15
    попробуй сравнивать поинтер с базой, если больше, то на выход
     
  3. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А какие вытекающие могут быть? Поставь SEH и чуть что - "corrupted pe file".
     
  4. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Fry Chicken

    попробуй сравнивать поинтер с базой, если больше, то на выход

    "По моему надо проверять перед cmp [esi],'EP' попадает ли esi в нвш map образ или нет." - по-моему это и есть сравнение сбазой.

    IceStudent

    Поставь SEH и чуть что - "corrupted pe file".

    Я с SEH ещё не разбирался. Спасибо за совет.