This is an old revision of the document!
Бывает что пишешь текст, бац и ошибка в программе или программа просто перестала отвечать, до того как отправил/сохранил. Набивать по новой - всегда мучение, особенно если не обладаешь исключительной памятью.
К счастью есть относительно простой способ вытащить свой текст. Для вытаскивания текста потребуется OllyDBG и Far или Notepad++. Особых навыков не требуется, достаточно быть уверенным пользователем. Сам я сегодня впервые это сделал, обычно отлаживаю только свои проги. Искушённых в отладке людей прошу не ругаться, метода описана доступным языком.
<h1>Замечание</h1> DNSLookup.exe - моё приложение, пришлось специально его модифицировать чтобы вылетал при нажатии кнопки test, дабы написать эту публикацию. Первоначально я вытаскивал из зависшего FireFox свой не отправленный комментарий. Размер текста для извлечения тоже не ограничен, в этом примере всего одно слово только как демонстрация техники.
1. Не закрываем приложение, пусть и дальше висит!
2. Сейчас нам нужно подключится к приложению которое зависло/вылетело отладчиком. Открываем <b>OllyDBG</b> и подключаемся к зависшему процессу: <b>File</b>, <b>Attach</b> в столбике <b>name</b> ищем зависший процесс и нажимаем <b>Attach</b>.
3. Теперь нам нужно найти наш текст в памяти приложения. Меню - <b>Windows</b>, <b>2 Memory Map</b>. В появившемся окне щёлкаем правой кнопкой мыши, в появившемся меню выбираем <b>Search</b>. Появится окошко:
В поле UNICODE вводим кусочек текста или цифры. Текст на русском у меня не искало. Хотя бы 3-4 символа, иначе будет много похожего.
Если это не то что искали, то закрываем окошко <b>Dump</b> с найденным текстом, и в окошке <b>Memory Map</b> щёлкаем правой кнопкой и выбираем <b>Search Next</b>. Если это то что мы искали, заветный текст то правой кнопкой, <b>Backup</b>, <b>Save data to file</b>.
5. Открываем сохранённый файл в Far / Notepad++, ищем текст из п 3.
Перед поиском нужно убедится что Far/Notepad++ интерпретируют содержимое файла как UTF-16 Little endian. (Shift + F8 в Far в режиме просмотра).
Остаётся только выделить найденное и скопировать в более удобное место.
<h1>Ограничения / особенности</h1> 1. Может потребоваться SeDebugPrivelege для пользователя который запускает OllyDbg. Можно запустить от имени пользователя который такую привилегию имеет, например от админа. 2. Я использовал OllyDbg х32, и приложения у меня были х32. Для зависшего х64 приложения может потребоваться х64 версия отладчика. 3. Notepad++ не всегда может правильно опознать кодировку и/или переключится на другую. 4. Если текст вводили в разные поля - скорее всего придётся повторять начиная с п3 до тех пор пока всё нужное не будет найдено и сохранено. 5. Для текстовых редакторов типа Word метод может не сработать, тк их внутреннее представление текста может быть отличным от UTF-16 Little endian. 6. UTF-16 Little endian - для юникодных программ, для старых ANSI. 7. В принципе можно за “вечер” написать утилиту которая будет сама всё делать, останется только выбрать процесс и какой фрагмент памяти и куда сохранить, просто случается не часто чтобы так автоматизировать. 8. Возможно OllyDbg и сама умеет показывать текст, и даёт его скопировать, но я ей пользоваться не умею потому действовал “по старинке” через Far. 9. Метод можно использовать против приложений которые не дают копировать текст, может повезти.
<h1>PS</h1> Вот как было в первый раз: Пока готовил еду, кто то из браузеров сожрал всю память, экслорер и опера вылетели, фаерфокс с недописанным комментарием повис (скорее всего тоже не смог выделить память, но более корректно обработал ошибку выделения).
Вспомнить я смог только site-to-site.