Форум: "Прочее";
Текущий архив: 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 и прочих профессиональных отладчиков.
← →
p © (2013-08-27 11:23) [9]Хочу поиск строк в имаже и в памяти
← →
p © (2013-08-27 11:32) [10]VMMap он в юзере моде работает, для большей эффективности сделаешь чтение памяти в кернеле моде? смотреть например процессы типа apv.exe, всяческую нехорошую тварь малварь.exe
← →
Rouse_ © (2013-08-27 11:42) [11]Нет, это избыточно, третьего кольца за глаза должно быть.
← →
p © (2013-08-27 11:49) [12]
> Rouse_ © (27.08.13 11:42) [11]
Под x86 например касперски не даст себя почитать, а если очень хочется?
← →
p © (2013-08-27 11:56) [13]не ну сам просил хотелки Александр
← →
p © (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