Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.03.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.003 c
15-1379363402
Юрий
2013-09-17 00:30
2014.03.02
С днем рождения ! 17 сентября 2013 вторник


15-1378488301
dmk
2013-09-06 21:25
2014.03.02
Снова SSD


1-1322557722
acsbaks
2011-11-29 13:08
2014.03.02
Delphi 7 и RES файл большого размера


15-1379298403
Я кирпичнул тлвр1043нд
2013-09-16 06:26
2014.03.02
UART и кобели


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский