Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.03.02;
Скачать: CL | DM;

Вниз

Карта памяти процесса   Найти похожие ветки 

 
Rouse_ ©   (2013-08-26 20:56) [0]

Ребят, а давайте порассуждаем - для чего вообще программисту необходимо иметь подробную информацию о карте памяти?

Сразу говорю - в данной ветке я собираю информацию для новой статьи :)

Ну на вскидку мои примеры:
1. отладка:
1.1 более удобно работать с памятью, когда видишь чему она принадлежит (образ файла/куча/стэк нити/стэк исключений и т.п.)
1.2. не нужно путаться с адресами секций загруженных образов исполняемых файлов, имея на руках адреса страниц

2. антиотладка:
2.1 детектирование внедренного кода работающего в собственной нити.
2.2 детектирование внедренного кода расположенного в библиотеке, загруженной посредством ловушек (Hook)

3. Работа над ошибками
3.1 актуальная карта памяти как минимум поможет при анализе необработанного исключения (обычно мы имеем на руках только регистры)

4. Прочее

Собственно здесь я накидал только самые очевидные варианты и хотелось бы узнать о вашей работе с картой памяти процесса.

На неделе закончу утилиту - можно сказать аналог VMMap от Руссиновича, только показывающую более подробно все параметры карты процесса, да и к тому-же выполненной в виде отдельного набора классов, которые могут быть использованы в стороннем приложении (32/64).

Можно сказать собираю хотелки.


 
картман ©   (2013-08-26 21:00) [1]

а что такое карта памяти?))


 
Rouse_ ©   (2013-08-26 21:01) [2]


> картман ©   (26.08.13 21:00) [1]

Это карта памяти твоего процесса, в которой читается где сколько и чего выделено и чему это принадлежит :)))


 
картман ©   (2013-08-26 21:04) [3]


> Rouse_ ©   (26.08.13 21:01) [2]

я хотел показать, насколько конкретно меня это интересует - хотелки ж собираешь, вот те для статистики.


 
Pavia ©   (2013-08-26 21:22) [4]

Давно хочу создать утилиту для измерения производительности. Не то что мне карта нужна, просто знать какие модули по каким адресам.
А так простому программисту карта не нужна.


 
brother ©   (2013-08-27 10:28) [5]

согласень с

> А так простому программисту карта не нужна.

единственное, что можно/нужно знать, сколько макимум памяти "жрет" прога...


 
brother ©   (2013-08-27 10:29) [6]

> На неделе закончу утилиту

оч. хочется помотреть, тем более что

> только показывающую более подробно все параметры карты процесса


 
brother ©   (2013-08-27 10:29) [7]

если все понравится, то буду использовать для "ручного" отлова троянчиков итп)


 
Rouse_ ©   (2013-08-27 11:13) [8]

Ну она скорее как помощь при отладке нужна, тем более что у Delphi вообще нет такого понятия как карта процесса, в отличие от Olly Debug и прочих профессиональных отладчиков.


 
©   (2013-08-27 11:23) [9]

Хочу поиск строк в имаже и в памяти


 
©   (2013-08-27 11:32) [10]

VMMap он в юзере моде работает, для большей эффективности сделаешь чтение памяти в кернеле моде? смотреть например процессы типа apv.exe, всяческую нехорошую тварь малварь.exe


 
Rouse_ ©   (2013-08-27 11:42) [11]

Нет, это избыточно, третьего кольца за глаза должно быть.


 
©   (2013-08-27 11:49) [12]


> Rouse_ ©   (27.08.13 11:42) [11]


Под x86 например касперски не даст себя почитать, а если очень хочется?


 
©   (2013-08-27 11:56) [13]

не ну сам просил хотелки Александр


 
©   (2013-08-27 12:05) [14]

у меня где то завалялся драйверок подписанный для работы в x64, там у меня есть read/write памяти, можно подключить его


 
Rouse_ ©   (2013-08-27 13:50) [15]

Дык я тулзу то для Delphi в первую очередь пишу. Ктож ей будет ядро отлаживать? :) Для этого есть специальный инструментарий :)


 
han_malign   (2013-08-28 15:46) [16]


> Можно сказать собираю хотелки.
...
> Дык я тулзу то для Delphi в первую очередь пишу. ...

- буквально недавно - цепочки блоков BorlandMM кучи, по дампу процесса, руками разбирал
(чтоб понять, что за гадость медленно, но верно утекает(приложение - 7/24))...


 
Rouse_ ©   (2013-08-28 18:06) [17]


> han_malign   (28.08.13 15:46) [16]

Карта куч у меня строится, но пока что просто как информация.
Я собственно первую версию тулзы выложу в рамках статьи, а потом буду сопровождать как отдельный инструмент, куда можно будет добавлять хотелки.

В первой пока что будет карта всех страниц с привязкой к ним куч/нитей (TLS/ExceptionList/StackBase/StackLimit etc)/разбивка мапленных PE образов по секциям с привязкой директорий, информация из ProcessEntryBlock + немного функционала, как-то поиск блока данных (анси/юникод/hex), быстрый вывод информации по произвольному адресу и еще немного фишек.


 
Игорь Шевченко ©   (2013-08-30 00:04) [18]


> для чего вообще программисту необходимо иметь подробную
> информацию о карте памяти?


не нужна


 
Юрий Зотов ©   (2013-08-30 01:13) [19]

> для чего вообще программисту необходимо иметь подробную
> информацию о карте памяти?

Прикладнику - точно не нужна. Ну совсем.

Что не умаляет актуальности сабжа. Ведь не все же прикладники.


 
Германн ©   (2013-08-30 02:13) [20]

Нужна.
А для чего программисту что-то нужно?


 
Rouse_ ©   (2013-08-30 16:34) [21]


> Юрий Зотов ©   (30.08.13 01:13) [19]
> Прикладнику - точно не нужна. Ну совсем.

Ну не факт, я своим стараюсь рассказывать про нюансы отладки, некоторые даже вникают и даже успешно применяют некоторые фишки :)


 
Rouse_ ©   (2013-08-30 17:30) [22]

Да и кстати по поводу утилиты, даже в текущем состоянии можно уже заценить результаты ее работы:
http://rouse.drkb.ru/tmp/pmm_bin.zip

Ну и сравнить с тем, что выводит VMMap (у которой я свиснул идеологию выдачи информации) или карты памяти от Olly Debug или IDA Pro

В архиве две версии для 32 и 64 бит. Запускать лучше ту, которая соответствует битности системы. Хотя можно конечно и 32 бьита запустить на 64 битной ос, но уплывут структуры и корректность результатов я не гарантирую.


 
Rouse_ ©   (2013-09-06 20:39) [23]

Ну собственно, почти все готово: http://rouse.drkb.ru/tmp/pmm_demo.zip

Полный исходный код и два сбилженых экзешника под 32 и 64 бита.
Компаратор карт памяти доделать сегодня не успел до конца (хотя и так нормально кажет), из ошибок - немного уплыли адреса PEB и TIB после рефакторинга (в понедельник - вторник доправлю).

Осталось причесать сам код (который выводит данные - остальное все чистенько) и накатать текст по поводу - чего вообще за фигня происходит :)

Желающие прошу потестировать.


 
Rouse_ ©   (2013-09-06 20:45) [24]

ЗЫ: чуть не забыл - для самостоятельной сборки нужно ХЕ4 + VirtualTreeView ( http://www.soft-gems.net/ )
На младших версиях дельфи скорее всего не соберется.


 
Pavia ©   (2013-09-06 20:57) [25]

А то что пустые блоки не отображает это так и задумано?
Чтение самого себя как-то странно работает.


 
Rouse_ ©   (2013-09-06 21:05) [26]


> Pavia ©   (06.09.13 20:57) [25]
> А то что пустые блоки не отображает это так и задумано?

В настройках включить нужно.


> Чтение самого себя как-то странно работает.

В каком плане? Вроде все норм у меня.
Сохрани карту плз и ко мне пульни на rouse79@yandex.ru


 
Rouse_ ©   (2013-09-06 21:06) [27]

ЗЫ: там нюанс, 32 битную на 64-битной системе лучше не запускать (структуры плывут).


 
Rouse_ ©   (2013-09-12 19:59) [28]

Пфф...
Выкладываю очередной апдейт утилиты.
В ней доделано большинство того что я хотел и осталось только добавить вывод параметров известных структур при дампах региона (PEB, SEH, TIB, SEH_Chain etc..., короче сугубо информационная составляющая).
Возможности утилиты следующие:

1. Информационное
- отображение карты памяти процесса с подробным отображением известных утилите структур с учетом страничной адресации (с привязкой на AllocationBase региона)
- отображение куч процесса (общий (без разбития на страницы) и полный срез данных). Реализовано через RtlAPI в обход ToolHelp32 что дает выигрыш в скорости.
- подробное отображение секций и директорий загруженных PE файлов
- частичное отображение данных по нитям, как-то TLS, Base/Limit Stack, ExceptionBlock, ThreadProc (SEH_Chain не успел добавить)
- вывод данных о шареной памяти (практического смысла не имеет, просто фишка
- отображение блоков данных из PEB
- вывод кратких параметров страницы

2. поиск
- поиск страницы которой принадлежит адрес
- поиск ANSII/UNICODE/HEX-блока в памяти процесса
- быстрый поиск данных по текущей карте памяти или списку экспорта (адрес/данные)

3. утилитарное
- краткая сводка по произвольному адресу
- отображение списка экспорта всех подгруженных в процесс модулей (с поиском)
- дамп указанного региона или произвольного адреса/размера

Известные ляпы подчищены, остались в принципе мелочевка, чтоб ламп выводился в читабельном виде.

Линк: http://rouse.drkb.ru/tmp/pmm_demo_beta1.zip

Приветствуются тестировщики и собственно теперь можно и начинать говорить хотелки. Практически все что я хотел - сделал, более того данный вариант тулзы уже был опробован в "боевом" применении на х64 и очень успешно :)


 
Rouse_ ©   (2013-09-12 20:09) [29]

ЗЫ: одну из основных фич забыл :)
Компаратор карт памяти, показывающий различия между двумя слепками (включен в настройках по дефолту, но можно и отключить).


 
Rouse_ ©   (2013-09-18 19:16) [30]

Дабы не выносить по каждому изменению народу мозг, скинул все на гитхаб: http://github.com/AlexanderBagel/ProcessMemoryMap

Тестеры и "хотельщики" расширения функционала все еще приветствуются.

Пока что выглядит все так:
http://rouse.drkb.ru/tmp/pmm/pmm.png

А это дампы памяти:

1. произвольного блока:
http://rouse.drkb.ru/tmp/pmm/pmm_dump.png
2. Блока окружения процесса:
http://rouse.drkb.ru/tmp/pmm/pmm_peb.png
3. Заголовка PE файла:
http://rouse.drkb.ru/tmp/pmm/pmm_peheader.png
4. Частичный вывод данных из KE_USER_SHARED_DATA:
http://rouse.drkb.ru/tmp/pmm/pmm_ke_user_shared.png


 
VICTOR_   (2013-09-18 19:21) [31]

Среди хотелок - при клике на заголовке колонки - сортировка/обратная сортировка по данной колонке. Так как єто сделано в vmmap


 
Rouse_ ©   (2013-09-18 19:32) [32]

На главной странице пробовал сделать - неудобно получилось (нечитабельный набор данных имхо, хотя посмотрим, может возверну).
Во всех остальных диалогах прикручено.
А, кстати там быстрый поиск данных введен в главной форме и в списке экспорта (просто набираем на клаве чего ищем и оно сразу фокусит).


 
VICTOR_   (2013-09-18 19:36) [33]

Имеется ввиду сортировка по Type, Size и т.д.


 
Rouse_ ©   (2013-09-18 19:55) [34]

Ну да, я понял. Пробовал так сортировать, мешанина получается. Карта же нужна для того чтобы понять где что лежит, а не где что какого размера лежит :)
А для типов - фильтрация прикручена.
Впрочем как я и говорил - пока это под вопросом, может и верну сортировку.


 
brother ©   (2013-09-20 10:34) [35]

хотелось бы вывод значений байт как char или dec (сейчас все hex)


 
brother ©   (2013-09-20 10:36) [36]

> как char

и выбор кодировок...



Страницы: 1 вся ветка

Текущий архив: 2014.03.02;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.008 c
15-1379439868
vasa777
2013-09-17 21:44
2014.03.02
форум


15-1378197457
картман
2013-09-03 12:37
2014.03.02
идентичные молекулы воды


15-1379393064
[ВладОшин]
2013-09-17 08:44
2014.03.02
Одно, конкретное, исключение игнорировать EVariantBadVarTypeError


15-1379488789
kudatsky@meta.ua
2013-09-18 11:19
2014.03.02
Не появляется окно установки компонентов


2-1368191657
clix
2013-05-10 17:14
2014.03.02
посоветуйте компонент или др. решение