Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Help с программой
Показать сообщение отдельно

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата:
Я бы рекомендовал реализовать КМП (как самый попсовый)
...а что в нём такого попсового??

Можно попробовать следующим образом,но тут идёт подход с проекцией файла:

Код: Выделить весь код
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;
В общем,что-то вроде этого.Только имей в виду,что в коде наверняка есть ошибки, т.к. я уже давно на Дельфях ничего не писал.

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 23:23, 22-11-2006 | #3

Название темы: Help с программой