Загрузка PE

Тема в разделе "WASM.ASSEMBLER", создана пользователем valeri, 11 июн 2005.

  1. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Работаю над загрузкой PE-файлов, все отлично работает, если их загружать на адрес 400000h, ну т.е. ImageBase по умолчанию. Но при загрузке на любой другой адрес файл выполняется, нои при вызове импортируемой функции происходит сбой. В чем возможная причина?
     
  2. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    ОФФТОП

    valeri

    Вижу ты делаешь не слабую штуку. Не мог бы ты дать ссылку на сайт с описанием твоей оси?(если ты зделал этот сайт :)
     
  3. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    valeri

    А релоки ты обрабатываешь?
     
  4. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Релоки обрабатываю, но в данном файле их нет.



    А сайта с описанием оси нет.
     
  5. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия
    Жаль...
     
  6. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433
    valeri

    я честно говоря не понимаю о чем ты говоришь. если про загрузку с переопределенной базой в винде - то все работает. если про свою собственную - то это уже тебе лучше знать чего оно не работает :). Если ты это поле используешь в загрузчике как полагается, то все должно работать. А как полагается - смотри описание таблицы импорта.
     
  7. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    А почему импортируемые функции могут работают нормально, если файл загрузить по адресу 400000h, значит таблицу импорта я обрабатываю правильно. Но если грузить по другому адресу импортируемые функции не работают.
     
  8. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
  9. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Что-то ничего связанного смоей проблемой мне найти не удалось.
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Блин, ну линк же специально дал ...

    Спрашивает: valeri


    Отвечает: Dr.Golova


    Отвечает: ssx


    Отвечает:Turkish


    Отвечает:CARDINAL
     
  11. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Значит, я так понял, что запусти код не по ImageBase невозможно?
     
  12. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    > Значит, я так понял, что запусти код не по

    > ImageBase невозможно?

    возмножно, но 屁股дробительно,

    релоков нет, это да, но большинство констант

    легко отличить от указателей (посмотри как делает это ида

    или почитай "образ мышления ида", лежит на kpnc.opnenet

    в файле ida.xxx.zip), указатели реально скорректировать.

    только гарантии, что файл не грохнется нет никакой.
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Смотри, есть у тебя код и листинг:
    Код (Text):
    1. ;==================================================
    2. variable    dd      -1
    3.             mov     eax,[variable]
    4. ;==================================================
    5. 00401000 | FFFFFFFF    | DD   FFFFFFFF
    6. 00401004 | A1 0010[b]40[/b]00 | MOV  EAX,[401000]
    7. ;==================================================
    Адрес переменной жестко прошит в exe'шнике который настроен на базу 0x00400000, что будет если этот код выполнить с базой 0x00500000? В eax попадет совсем другая переменная, не та что на 4 байта ниже кода, а та что по адресу 0x00401000, а знаешь сколько таких переменных в программе, а импорт, ресурсы? та полная ... во-во 屁股 (хотя импорт и ресурсы это не проблема, там по RVA)
     
  14. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    А как же тогда файлы exe загружаются в Windows? Не грузятся же они по одному адресу.
     
  15. R_NEW

    R_NEW New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    86
    Адрес:
    Россия


    Windows использует LDT и страничную трансляцию адреса.
     
  16. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Не смеши меня :)

    Не знаю как отстойная линейка 9х, но NT не использует LDT вообще, и грузит PE файлы без релоков всегда по одному адресу, либо не грузит их вообще.
     
  17. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    exe файлы в винде грузятся всегда по image base. Если адрес уже занят (а это в принципе невозможно, бо образ ехе грузится в адресно пространство самым первым), то даже при наличии релоков загрузка будет остановлена - это недвусмысленно написано у мелкомягких.
     
  18. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    По подробнее, почему адрес image base не может быть занят, ведь в память всегда загружено множество exe файлов и image base по умолчанию у них одна и та же.
     
  19. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Адреса памяти бывают физическими и виртуальными. Любое обращение любого кода к памяти рассматривается как обращение по виртуальному адресу, а затем этот виртуальный адрес преобразуется в физический посредством таблицы страниц (подробнее - мануалы Intel). Для каждого процесса в Windows своя таблица страниц, соответственно один и тот же виртуальный адрес 400000h в двух разных процессах транслируется на два разных физических адреса.
     
  20. valeri

    valeri New Member

    Публикаций:
    0
    Регистрация:
    3 июн 2005
    Сообщения:
    59
    Адрес:
    Russia
    Реализуя страничную адресацию, а с ней и виртуальную память наткнулся на проблему. она заключается в том, что при включенной страничной адресации, когда прерывание таймера происходит через шлюз задачи, то происходит перезагрузка компьютера.