как узнать места выделения пямяти в проге

Тема в разделе "WASM.RESEARCH", создана пользователем lan255, 26 янв 2005.

  1. lan255

    lan255 New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    7
    Имеется прожка для моделирования (методом конечных элементов), которая в бесплатной версии ограничиват расчет неким числом, выше которого прога выводит

    сообщение, что превешено максимальное количество элементов.



    Эта проблема решена.



    Теперь можно разбивать модель на любое количество элементов, но вот решать с любым количеством элементов она не хочет. Вылетает с следующим сообщением (адреса

    меняются):



    В Windows

    -------------------------------------------------------

    Error signature

    AppName: elcut.exe AppVer: 5.1.4.137 ModName: elcut.exe

    ModVer: 5.1.4.137 Offset: 0007f22d

    -------------------------------------------------------



    В дебаггере IDA

    -------------------------------------------------------

    Elcut.exe: The instruction at 0X7C9377C9 referenced at

    0X0100FCC. The memory could not be written.

    (0X7C9377C9 -> 0X0100FCC)

    -------------------------------------------------------



    Опытным путем удалось выяснтить, что максимальное число элементов, при котором можно решить модель (и программа не вылетает) находится в диапазоне 300-500 в зависимости от модели.



    Как я понимаю разработчики выложили версию программы, в которой статически в каком-то месте выделяется блок памяти фиксированного размера.





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



    Существуют ли программы, которые могут визуально показать блоки программ и данных с адресами начала и конца в виде некого столбца (как обычно рисуют в учебниках, для

    объяснения с каких адресов что начинается)?



    Может есть какой-то более-менее стандартный набор команд на ассемблере для выделения памяти, по которому можно провести поиск в дизассемблированной программе?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан




    Команд нет, есть API: GlobalAlloc, VirtualAlloc, HeapAlloc



    Данные так же могут храниться непосредственно в секции данных неинициализированными данными. Вот такой каламбур :) Если действительно ограничение количества элементов не является конкретным числом, то задача требует более детального исследования. Если бы удалось узнать сколько именно выделяется на этот массив, задача бы была упрощена. Для начала поюзай TaskManager, чтобы хоть примерно оценить размер этого массива.
     
  3. lan255

    lan255 New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    7
    to _DEN_ Спасибо. Попытаюсь, но уже измучался...мне код этой проги уже снится:))
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан




    Нормальное явление :) Если элементы можно называть, то можно после создания элемента найти название в оперативе заюзав SoftIce. Тут практически сразу можно будет выяснить лежит ли этот массив в неинициализированных данных или же он выделен одной из вышеуказанных функций. Для этого достаточно посмотреть, принадлежит ли виртуальный адрес объекта виртуальному адресу модуля. Тоесть, попадает ли адрес элемента в адресное пространство модуля. Если нет - то это выделенная память и скорее всего достаточно будет поменять один дворд, Если да, то это часть exe-шника и тут сложнее. Придется переассемблировать экзешник. Занятие не из приятных.
     
  5. lan255

    lan255 New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    7
    to _DEN_ "Придется переассемблировать экзешник. Занятие не из приятных"



    А по подробней можно? Как-то с таким еще не сталкивался.
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Существуют ли программы, которые могут визуально показать блоки программ и данных с адресами начала и конца в виде некого столбца (как обычно рисуют в учебниках, для

    объяснения с каких адресов что начинается)?





    угу :) называется Soft-Ice :) команда map32 :)
     
  7. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    ну не так все плохо. Обучно проще расширить секцию и поправить все обращения к блоку на новую область. И ничего перекомпилировать не надо.
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    infern0





    А как там на счет данных / секций, идущих за расширяемым блоком? Надо ведь и все обращения к ним поправить? А если там вобще код идет? Вероятность конечно мала, но вот тогда точно без геморойных свечей не обойтись :)
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Да и кстати, что значит "поправить"? :) Это значит дизассемблировать exe-шник, посмотреть на каждую mov/add/sub/push/pop/etc и посмотреть, не лезит ли она в новую область? Если лезит то поправить. А если где-то размер старой области фигурировал? Тоже править.



    Если бы у hiew был плагиновый интерфейс, то это бы очень помогло :)



    ---



    правка: аттач откуда-то нарисовался :)
     
  10. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    volodya

    угу :) называется Soft-Ice :) команда map32 :)



    Можно, конечно, и термоядерной бомбой тараканов охреначивать - подохнут, падлы, однозначно :) Но я бы во вражью программу сначала API-шпиончика попробовал заслать и в его логи позаглядывать.
     
  11. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    > "Существуют ли программы, которые могут визуально показать блоки программ и данных ..."



    угу :) называется OllyDbg :) команда меню View\Memory :)

    Или это тоже из области термояда ?
     
  12. lan255

    lan255 New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    7
    to leo. Пасиб за совет.



    Классная штучка OllyDbg. Недавно качнул и забыл про нее. Все Ice да Ida. А тут такое средство, еще и мало занимает. А опция View\Memory вообще супер. Именно такое и хотелось.
     
  13. lan255

    lan255 New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    7
    to CyberManiac "API-шпиончика попробовал заслать"



    С помощью какого софта можно такого шпиончика на прогу натравить? Если off-line, то я пользуюсь eXeScope, можно посмотреть импортируемые функции, но, конечно, в реальном времени оно было бы лучше наблюдать за процессом.
     
  14. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    никак. ДОбавь новую секцию в самый конец и поправь все ссылки на блок на новый VA. Из мухи слона делаете...



    с точностью до наоборот. Нужно смотреть все xref-ы на блок памяти. В иде это достаточно просто. Да, безусловно гимор есть, но если прога на HLL то особо ничего править и не придется. Более того - если это делфи, то она имеет свойство хранить адрес блока в отдельном дворде и адресоватся типа mov eax, [pblock]; mov bl, [eax+nnn]; - тогда вообще детский сад.
     
  15. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    infern0



    Я к тому что своими силамии это довольно муторно делать. Может быть есть софт коротый сам все это сделает :) Тогда кочесно просто... :)
     
  16. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    ага, с голосовым управлением. Хочу блин полную версию и опа - вот и она.
     
  17. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    lan255

    Классная штучка OllyDbg. Недавно качнул и забыл про нее.



    Ну и зря. На редкость удобная штука, особенно для отладки своих проектов. Когда можно обойтись без Айса - только им и пользуюсь.



    lan255

    С помощью какого софта можно такого шпиончика на прогу натравить?



    С помощью любого, который может быть назван словами API Spy,

    к примеру, Bounds Checker или APIS32, некоторые есть на wasm.ru. Володя буквально на днях перехватчик API с исходниками выложил, но там немного попрограммировать придется, чтобы оно логи в файл скидывало. Если речь про Delphi\Builder - просто берешь DeDe и смотришь, что почем.
     
  18. lan255

    lan255 New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    7
    to CyberManiac "OllyDbg ... На редкость удобная штука"



    Сегодня полазил по нету, а работу с этой пргой на русском еще никто нигде не описал. Ток страничку одну нашел с описанием кнопочек. К сайсу навалом, а к етой удобной штуке нет. Эт я не из-за того, что англ не знаю. Наоборот. Просто странно.
     
  19. nice

    nice New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    42
    Адрес:
    Russia
  20. lan255

    lan255 New Member

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    7
    to All. Пасиб. Инфа есть, буду разбираться.