Цитата:
Я бы рекомендовал реализовать КМП (как самый попсовый)
|
...а что в нём такого попсового??
Можно попробовать следующим образом,но тут идёт подход с проекцией файла:
Код:
var
hExe, FileSize, hFileMapping, MapViewPtr : Cardinal;
Pos : Integer;
begin
// Открываем файл
hExe := CreateFile(OpenDlgBox.lpstrFile, GENERIC_READ, 0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
// Получаем размер файла
FileSize := GetFileSize(hExe, nil);
// Создаём проекцию файла
hFileMapping := CreateFileMapping(hExe, nil, PAGE_READWRITE, 0, 0, nil);
// Отображаем созданную проекцию в адресное пространство вызывающего процесса
MapViewPtr := MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
// Тут начинаем искать нужную сигнатуру,например:
for Pos := 0 to FileSize do
if MapViewPtr[Pos] = $3D then // ассемблерная команда CMP EAX, 2000
if MapViewPtr[Pos+1] = $00 then
if MapViewPtr[Pos+2] = $20 then
if MapViewPtr[Pos+3] = $00 then
if MapViewPtr[Pos+4] = $00 then
begin
Типа нашли!!;
Break;
end else Типа ничего не нашли;
// Ну и в конце концов...
// Сворачиваем отображение в памяти
UnMapViewOfFile(MemPtr);
// Закрываем проекцию файла
CloseHandle(hFileMapping);
// Закрываем открытый файл
CloseHandle(hExe);
end;
В общем,что-то вроде этого.Только имей в виду,что в коде наверняка есть ошибки, т.к. я уже давно на Дельфях ничего не писал.