Как загрузить исполняемый код по адресу 0x10000?

Тема в разделе "WASM.WIN32", создана пользователем gvozdoder, 9 окт 2007.

  1. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    дык если имаджбэейс=10000 и ты делоешь виртуолфри - нифига не выйдет. надо делоть unmap, так как там находецо маппенг твоего екзешника
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    А зачем? Память уже ведь есть выделенная, зачем заново выделять? Или мало?
     
  3. gvozdoder

    gvozdoder New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2007
    Сообщения:
    7
    FreeManCPM
    База была 0x400000, т. е. файлмэппинга там не должно было быть.

    IceStudent
    Мало. Там выделено 2 куска по смещениям 0x10000 и 0x20000 оба размером по 0x1000. А мне нужно где-то 0x80000 байт, т. е. полмегабайта. Может быть даже больше понадобится. Есть идея не трогать существующие блоки, а только довыделить столько, сколько не хватает.
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    глянул в олли первую попавшуюся прогу, чтоб посмореть карту памяти.. вобщем там не получицо довыделить до полметра, там еще есть занятые блоки, при чем
    т.е. исчо и стек придецо тогда кудато перенести...
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Угу. Может проще обработать код, чтобы он грузился с более старших адресов?
     
  6. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Проверил - после освобождения памяти VirtualAlloc((LPVOID)0x10000,0x10000,MEM_COMMIT,PAGE_READWRITE) проваливается, а VirtualAlloc((LPVOID)0x10000,0x10000,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE) нормально отрабатывает. Почему - вероятно, тайна Microsoft'а :)
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    diamond, внимательно читай МСДН
     
  8. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    FreeManCPM
    VirtualAlloc(NULL,0x10000,MEM_COMMIT,PAGE_READWRITE) замечательно осуществляет "simultaneously reserve and commit a region of free pages"
     
  9. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Cr4sh
    ексепшнов может и не быть если по данным адресам память передана и она рирайт. Скорее фсего у тебя просто загнётся процесс. потому как читаться и писаться данные этой длл будут, но это скорее всего будут чьи то чужие даныые=))
     
  10. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    diamond
    какраз "simultaneously !!!!!reserve and commit!!!!! a region of free pages" это
    VirtualAlloc((LPVOID)0x10000,0x10000,!!!!!MEM_RESERVE|MEM_COMMIT!!!!,PAGE_READWRITE)
    k3internal
    как вореант поставить ноаксес, сделоть проверку откуда произошол запрос чтения записи в обработчике.. если не из нашего кода, то просто довать доступ, если из нашего - подменять.. хотя тут лажа с много поточностью вылазит.. если мы даем читать какомуто треду область памяти, она становится доступной и для нашего кода. хотя если поставить обработчику высокий приоритет, можт и прокатит
     
  11. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    FreeManCPM
    MSDN: описание MEM_COMMIT:
    описание MEM_RESERVE:
    По крайней мере, это можно понять так, что MEM_COMMIT выделяет память и при необходимости выделяет также кусок адресного пространства. Такое понимание подтверждается тем, что VirtualAlloc(NULL,...,MEM_COMMIT,...) работает.
    Впрочем, у Рихтера чёрным по белому написано:
    Так что умолкаю.
     
  12. gvozdoder

    gvozdoder New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2007
    Сообщения:
    7
    diamond
    Изменение LDT привело к желаемым результатам, т. е. с помощью добавленного селектора стали адресуемыми адреса близкие к 0 (и даже 0).
    Т. е. оно работает, но есть небольшое неудобство. Ни один из проверенных отладчиков (ollydbg, windbg, visual studio debugger и еще несколько трешевых отладчиков) не в состоянии был корректно обработать изменение селектора cs на мой. Некоторые отладчики выдавали сообщение об ошибке, некоторые показывали неинициализированную память по адресу 0, но step by step работал. Windbg отличился тем, что при переходе на 0F:00000000 показал мне 0x00430000, т. е. базу моего селектора, но не отобразил дизассемблерного листинга, т. к. 0F:00430000, естественно, ничего не содержит. SoftICE не пробовал, ибо древний и ставится на XP методом плясок с бубном.
    Какой отладчик можете порекомендовать для моего случая? SoftICE мне поможет?
     
  13. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    gvozdoder Это ж, практически антиотладка ))) Попробуй Syser - вроде неплохой отладчик режима ядра и к тому же бесплатный. Скачивается с оф сайта.

    Ща ссылку дам..

    http://www.sysersoft.com/
     
  14. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    C каких это пор?
     
  15. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    asd О блин...Значит, я просто не задумывался над этим, работает и Бог с ним...
     
  16. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    gvozdoder
    SoftICE без IceExt прекрасно работает и с нестандартным неплоским cs. (С IceExt начинаются проблемы, там ds и es регулярно сбрасываются в стандартные плоские значения.)
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582