Отладочная информация в PE
От: Алексей Мартынов Россия  
Дата: 14.11.06 09:02
Оценка:
Добрый день.

Стоит непростая задача заменить имя PDB-файла в собранном модуле.
На первый взгляд, все относительной просто, при использовании ImageHelp:
1. MapAndLoad
2. находим Debug Directory в Optional Headers (7 элемент).
3. Находим запись с IMAGE_DEBUG_TYPE_CODEVIEW, где расположена сигнатура "RSDS" и имя файла.

Но есть проблема. Если новое имя файла меньше по длине старого, то никаких проблем нет. А если оно больше? то как определить, сколько еще байт за именем текущего PDB-файла можно использовать?

Вариант "полностью разобрать PE-файл, исправить и собрать заново" лучше не предлагать, так как соответствие отладочных символов в PDB трудно гарантировать.

Alexey Martynov
Алексей Мартынов
Re: Отладочная информация в PE
От: gear nuke  
Дата: 15.11.06 09:02
Оценка:
Здравствуйте, Алексей Мартынов, Вы писали:

АМ>Добрый день.


АМ>Стоит непростая задача заменить имя PDB-файла в собранном модуле.

АМ>На первый взгляд, все относительной просто, при использовании ImageHelp:
АМ>1. MapAndLoad
АМ>2. находим Debug Directory в Optional Headers (7 элемент).
АМ>3. Находим запись с IMAGE_DEBUG_TYPE_CODEVIEW, где расположена сигнатура "RSDS" и имя файла.

АМ>Но есть проблема. Если новое имя файла меньше по длине старого, то никаких проблем нет. А если оно больше? то как определить, сколько еще байт за именем текущего PDB-файла можно использовать?


Там ведь не просто имя файла, а абсолютный путь. Может быть проще позаботиться, что бы его длина была достаточно короткой? Или попробовать MS-DOS имя.

Кстати, нужно что бы GUID'ы в CODEVIEW и PDB были одинаковы.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[2]: Отладочная информация в PE
От: Алексей Мартынов Россия  
Дата: 16.11.06 05:04
Оценка:
Здравствуйте, gear nuke, Вы писали:

АМ>>Но есть проблема. Если новое имя файла меньше по длине старого, то никаких проблем нет. А если оно больше? то как определить, сколько еще байт за именем текущего PDB-файла можно использовать?


GN>Там ведь не просто имя файла, а абсолютный путь. Может быть проще позаботиться, что бы его длина была достаточно короткой? Или попробовать MS-DOS имя.


Это верно, но задача на самом деле такая — при сборке проекта переименовать пришедший извне EXE-шник (или DLL-ку) вместе с PDB-шником, так как универсальный компонент используется в конкретных целях. В данном случае это что-то вроде svchost.exe. Когда у тебя даже 2 процесса с одинковыми именами, но делающими разное, становится трудновато найти нужный . В крайнем случае, всегда можно оставить вместо полного пути одно имя — фактический поиск WinDBG, например, ведет по имени файла в указанных ему каталогах (причяем без подкаталогов), если по полному пути ничего не нашлось.
Видимо, так и придется сделать.

GN>Кстати, нужно что бы GUID'ы в CODEVIEW и PDB были одинаковы.


Ну это исправляется 2 путями:
1. синхронным переменованием PDB.
2. использованием спецтула. Еще можно пофиксить GUID в PE из PDB-шника.

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

Alexey Martynov
Алексей Мартынов
Re[3]: Отладочная информация в PE
От: Сергей Мухин Россия  
Дата: 16.11.06 06:45
Оценка:
Здравствуйте, Алексей Мартынов, Вы писали:

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


CodeView формат, все в .exe все отладчики понимают (даже наш)
---
С уважением,
Сергей Мухин
Re[4]: Отладочная информация в PE
От: Алексей Мартынов Россия  
Дата: 16.11.06 09:57
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, Алексей Мартынов, Вы писали:


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


СМ>CodeView формат, все в .exe все отладчики понимают (даже наш)


Беда только в том, что мне удавалось с VS.NET 2003 получить отладочные символы в объектных файлах, но линкер их выбрасывал в PDB

Alexey Martynov
Алексей Мартынов
Re[5]: Отладочная информация в PE
От: Сергей Мухин Россия  
Дата: 16.11.06 10:30
Оценка:
Здравствуйте, Алексей Мартынов, Вы писали:


СМ>>CodeView формат, все в .exe все отладчики понимают (даже наш)


АМ>Беда только в том, что мне удавалось с VS.NET 2003 получить отладочные символы в объектных файлах, но линкер их выбрасывал в PDB



в 2003 может еще есть опции
/debugtype:cv /pdb:none

а в 2005 вроде как и нет их уже
---
С уважением,
Сергей Мухин
Re[6]: Отладочная информация в PE
От: Алексей Мартынов Россия  
Дата: 17.11.06 07:58
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, Алексей Мартынов, Вы писали:



СМ>>>CodeView формат, все в .exe все отладчики понимают (даже наш)


АМ>>Беда только в том, что мне удавалось с VS.NET 2003 получить отладочные символы в объектных файлах, но линкер их выбрасывал в PDB



СМ>в 2003 может еще есть опции

СМ>/debugtype:cv /pdb:none

СМ>а в 2005 вроде как и нет их уже


Увы, в VS.NET 2003 уже нет

Alexey Martynov
Алексей Мартынов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.