Обнаружение madexcept внутри приложения Delphi

Я могу определить, используется ли madexcept внутри приложения delphi, анализируя только exe-файл?

Есть ли простой способ, добавив несколько строк кода в мое приложение и сообщить конечному пользователю исполняемого файла, если madshi madexcept был использован или нет

3 ответа

Решение

Если вы используете madexcept с приложением Delphi должна быть запись ресурса: MAD->EXCEPT в этом исполняемом файле.

Чтобы протестировать внешнее приложение:

var
  h: HMODULE;

  h := LoadLibraryEx('c:\foo\bar.exe', 0, LOAD_LIBRARY_AS_DATAFILE);
  if h <> 0 then
  begin
    if FindResource(h, 'EXCEPT', 'MAD') <> 0 then 
      ShowMessage('madexcept Found!');
    FreeLibrary(h);
  end;

Чтобы проверить внутри собственного приложения:

if FindResource(HInstance, 'EXCEPT', 'MAD') <> 0 then 
  ShowMessage('madexcept Found!');

Обратите внимание, что, однако, не скажет вам, какие варианты madexcept использует. например, может быть фильтр исключений, установленный для фильтрации исключений нарушений прав доступа, или параметр, который НЕ будет проверять замороженные потоки и т. д.

Вы можете сделать простой текстовый поиск по тексту "madexcept". Самый простой способ сделать это из известных мне утилит командной строки. Я хотел бы объединить строки и утилиты grep следующим образом:

C: \ mydir> strings MyApp.exe | grep -i madexcept
MadException
MadExceptionT
madExcept
        madExcept
U9v; 1 madExcept5
Безумный, кроме
        madExcept
        madExcept1
c       madExceptL
c MadExcept
c MadExcept
c       madExceptL
c MadExcept
c MadExcept
        madExcept
c       madExceptH
Таким образом, madExcept не может установить обработчики потоков..........

Я лично использую GnuWin32 в качестве источника для этих необходимых утилит.

Если вы не человек командной строки, используйте Process Explorer. Запустите исполняемый файл, а затем запустите Process Explorer. Найдите процесс и дважды щелкните по нему. Откроется диалоговое окно свойств Process Explorer, которое содержит страницу с именем Strings. Выберите эту страницу и нажмите кнопку Сохранить. Теперь у вас есть текстовый файл со всеми строками в исполняемом файле, в котором вы можете искать.

Все это скажет вам, что вы скомпилировали код madExcept в свою программу. Вы не будете знать, действительно ли он активен.

Если вы посмотрите на параметры проекта с включенным madExcept, я полагаю, что вы увидите используемое определение madExcept, например, в вашей программе везде, где вы можете сделать:

{$IFDEF madExcept}
  ....
{$ENDIF}
Другие вопросы по тегам