0

Учитывая следующее:Как низкоуровневый отладчик метода COM DLL (плагин Firefox) с помощью кода на C++ без отладочной информации?

  • 32-разрядные DLL файл кода какого-либо старого Firefox плагин (то есть DLL, содержащая среди друга Typelib, XSD и записи XSL), без исходного кода или отладочной информации, первоначально закодированы в C++ и скомпилированы с Visual Studio,
  • имя и параметры экспортируемой функции/метода в этой DLL (функция плагина Firefox,, доступную в JS кода)
  • Visual Studio Community 2013 работает на Windows 7,
  • опыт разработки на C++, но не с COM или Firefox,
  • опыт отладки коды Intel ассемблера,
  • код лицензия, который не запрещает разборку DLL,

Я хотел бы сделать это: Загрузите DLL в некоторых C++ кода, и шаг на уровне процессора в код функции, чтобы узнать, что именно он делает.

Не могли бы вы дать мне какой-нибудь намек на то, с чего начать и как это сделать? Я думаю, для DLL может понадобиться какая-то инициализация, специфичная для Firefox, прежде чем я могу вызвать функцию, которую я хотел бы отлаживать. Можно ли это сделать с помощью SDK Firefox, без исходного кода и информации об отладке для DLL? Или мне удастся «нагреть» загрузку DLL, найдя точку входа - довольно простую функцию (как?) И вызвав ее?

Спасибо за любые подсказки.

+0

Нет Источник код будет иметь ограничения, если вы отлаживаете файл dll только с PDB-файлом, даже если вы также можете получить отладочную информацию: https://www.codeproject.com/questions/287477/debug-the-reference-dll-without-source -code-in-sol и https://msdn.microsoft.com/en-us/library/ms241613.aspx?f=255&MSPPError=-2147217396 –

+0

любое обновление? Не могли бы вы сообщить мне последнюю информацию об этой проблеме? –

+0

Как я уже писал выше, для DLL недоступна информация об отладке (например, PDB-файл). Просто таблицы символов и т. Д., Которые напрямую экспортируются из DLL. – following

ответ

0

Если нет файла pdb или исходного кода, вам сложно отлаживать файл dll, так как отладчик загружает отладочную информацию из файла PDB и использует ее для поиска символов или связывания текущего состояния выполнения исходного кода программы. Visual Studio использует файлы PDB в качестве основного формата файла для отладки информации во время отладки. Если этих файлов нет, вы не сможете отладить эту библиотеку.

Update:

Мы динамически загрузки библиотеки DLL для одного проекта с помощью функции LoadLibrary(), но если вы хотите, чтобы войти в свой файл DLL, он действительно требует PDB файл. Простым примером является то, что вы можете создать и поместить один файл pdb в ту же папку, что и один простой пользовательский проект библиотеки DLL. Я думаю, что Visual Studio будет автоматически искать в каталоге и загружать их, вы можете найти информацию в окнах модулей Debug.

Следующий случай не тот же вопрос, как ваша, но он также поделился с нами, что бы загрузить PDB файл, если файл DLL был действительно вызван один проект/процесс:

Does winbase::LoadLibrary() load .pdbs?

+0

Информация о перемещении а также символы точки входа не находятся в PDB, а в DLL (в противном случае DLL вообще не будет использоваться). Windows требует как информации для запуска DLL-кода. Это возможно для низкоуровневого отладки любой DLL без PDB файл - см. мой последний комментарий выше - я мог бы сделать это с помощью «простой DLL», но я не знаю подробностей о том, как это сделать с помощью COM DLL. Вот о чем мой вопрос здесь. – following

+0

@ Я просто предоставляю некоторую информацию в своем предыдущем ответе, но если вы действительно хотите войти в DLL-файл, для этого потребуется файл pdb. –

+0

В представлении о разборке можно входить в любой код без какого-либо PDB-файла. – following

Смежные вопросы