Аналіз Дампів Пам’яті

Практичні Основи Налагодження Windows-програм

Вийшла книга (англійською мовою):

Я також планую видати її українською мовою.

Я сертифікований за нутрощами Windows

То була довга дорога. Спочатку переліт до Штатів, Редмонд для участі у підготовці іспиту. Потім чекає бета-іспит. Потім в Ірландії поїздом із Дубліна до Корку для проходження іспиту в одному із центрів тестування. Сьогодні я отримав лист з привітаннями про успішну складання іспиту і зареєструвавшись на сайті MCP я побудував це лого:

Посилання на вимоги до іспиту:

Інтернет-сервер символьних файлів Citrix

Використовуйте цей шлях:

Деталі описані у статті:

Антологія Аналізу Дампов Пам'яті, Том 2

Вийшов другий том антології (англійською мовою):

Дампи Пам'яті для Чайників (Частина 5)

У цій частині спробую пояснити файли символів (symbol files). Зазвичай їх називають файлами PDB, тому що їхні імена мають розширення .PDB. Старі файли символів також можуть мати розширення .DBG. Файли PDB потрібні для правильного читання дампів пам'яті. Без файлів PDB, дамп пам'яті є простим набором чисел, вміст пам'яті без будь-якої інтерпретації. Файли PDB допомагають інструментам та відладчикам типу WinDbg правильно інтерпретувати дані та перетворити їх на читабельний формат. Грубо кажучи, PDB-файли містять відповідності між числами та їх інтерпретацією, вираженою в коротких рядках тексту:

дампів

Оскільки ці відповідності змінюються, коли ми встановлюємо патч або виправлену версію програми на комп'ютер і у нас з'явився новий файл дампа пам'яті, нам необхідні нові файли PDB, які відповідають зміненим компонентам DLL або драйверам.

0:000> .symfix Знижка не має значення, використовуючи C:\Program Files\Debugging Tools for Windows\sym

0:000> .sympath Symbol search path is: SRV**http://msdl.microsoft.com/download/symbols

0:000> .symfix c:\websymbols

0:000> .sympath Symbol search path is: SRV* c:\websymbols *http://msdl.microsoft.com/download/symbols

На замітку: Використовуйте це посилання для швидкого встановлення відладчика WinDbg та нагадування про шляхи та команди завантаження символів:

Дампи Пам'яті для Чайників (Частина 4)

Коли програма падає, він часто зникає. Коли процес зависає, програма все ще перебуває в оперативній пам'яті: ми можемо бачити його в Диспетчері Завдань (Task Manager), наприклад, але вона не реагує на команди користувача або інші запити як перевірка реакції порту TCP/IP (pinging a TCP/ IP port). Якщо у нас відбулося падіння операційної системи, то ми спостерігаємо синій екран смерті (BSOD) та/або перезавантаження системи. При зависанні системи все завмирає.

Зависання додатків або системи легко пояснити, якщо розглядати взаємодії між додатками або компонентами системи як обмін повідомленнями. Один компонент посилає повідомлення іншому і чекає на відповідь. Деякі компоненти є критичними, як, наприклад, реєстр конфігурації та налаштувань (registry). Наступна картинка ілюструє ситуацію зависань, що часто зустрічається, коли реєстр перестає відповідати на запити. Тоді кожен додаток, що запитує свої власні або системні налаштування, перестає працювати.

аналіз

Дуже часто зустрічається причиною зависань є так званий дідлок (deadlock), коли два додатки (точніше, їх обчислювальні шляхи, потоки) взаємно чекають один одного. Тут можна навести аналогію ззаблокованою дорогою:

аналіз

Для того, щоб подивитися, що всередині програми (процесу) або операційної системи викликало зависання, нам потрібен дамп пам'яті. Як нам отримати його, якщо програма чи служба зависла? Поки що посилання дано на ще не перекладені статті англійською мовою.

Як отримати дамп пам'яті, якщо система зависла?

Для більшості системних зависань достатньо вибрати дамп ядра (Kernel memory dump) в Контрольній Панелі (Control Panel System System Advanced Startup and Recovery). Дампи ядра менші за розміром і менше схильні до пошкоджень і обрубань через недостатній розмір файлу підкачки (page file). Якщо ви виявите, що вам потрібно подивитися, що відбувається всередині додатків, то потрібно буде вибрати повний дамп фізичної пам'яті (Complete memory dump).

Англійська для Інженерів-Програмістів (Частина 1)

У мене давно була мрія почати писати про англійську мову та використовувати для ілюстрацій мову проектування UML (Unified Modeling Language). Після багатьох років роботи за кордоном та читання сотень книг англійською мовою, включаючи лінгвістичну літературу, я став помічати, що знаю граматику англійської мови краще за українську. Сьогодні я розповім про перший урок, який я засвоїв у 90-х під час роботи, посилаючи нові версії програм щотижня американським замовникам. Йтиметься про справжній досконалий час (Present Perfect Tense). Його використовують, коли хочуть наголосити, що дія щойно відбулася. Уявимо, що ми щойно надіслали багфікс або нову версію. Якщо ми напишемо “I sent the fix” або “I sent the new version” це буде означати що ви послали його деякий час тому (минулий час, Past Tense) та багато що могло змінитись з тих пір. Але якщо ми напишемо “I've sent thefix” (Ihave sent the fix) або “I've sent the new version” (Ihave sent the new version), це буде означати, що ми встигли прямо зараз, буквально перед тим, як ми написали про це. Можна посилити згадку про те, що ми щойно зробили це: “I'vejust sent the fix” (Я щойно послав багфікс).

Різниця між двома часом може бути проілюстрована наступних двох діаграмах послідовності (sequence diagram). У назвах я використовую англійську мову як додатковий навчальний засіб.

аналіз

Коли з контексту зрозуміло, замість Present Perfect Tense можна використовувати Past Tense. Багато хто так і робить, особливо в Штатах. За моїми спостереженнями, використання Present Perfect Tense є більш специфічним для європейських англомовних країн. Якщо ви сумніваєтеся в правильності пропозиції або фрагмента, використовуйте Google для частотного порівняння:

"I've sent" - 1,840,000 разів "I sent" - 23,600,000 разів "I send" - 14,700,000 разів (Я безперечно маю намір послати …) "I'vesend - 60,900 разів (помилка у формі дієслова)

або пошук за повною фразою:

"I've sent the fix" - 7 разів "I'sent the fix" - 42 рази "I send the fix" - 5 разів (Я безперечно маю намір послати багфікс) "I'vesend the fix “ - 1 раз (помилка у формі дієслова)

Якщо ви згадуєте точний час, потрібно використовувати Past Tense: ”I sent the fixyesterday ” (Я послав багфікс вчора).

У наступній частині ми поговоримо про форми дієслова.