Обнаружение 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}