Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: cheops   (18.02.2007 в 15:16)
Можно поступить следующим образом
#include <iostream>
using namespace std;

int main()
{
  // Шестнадцатеричная последовательность
  unsigned char arr[] = {0xF8, 0xAC, 0x2C, 0x9D, 
                         0xE3, 0xD4, 0x2B, 0x4D, 
                         0xBD, 0x30, 0x91, 0x6E, 
                         0xD8, 0x4F, 0x31, 0xDC};

  // Открываем файл
  FILE *stream;
  if((stream = fopen("php.exe""r+b")) == NULL)
  {
    fprintf(stderr, "Cannot open file.\n");
    return 1;
  }
  
  // Определяем размер файла
  fseek(stream, 0L, SEEK_END);
  int filesize = ftell(stream);
  rewind(stream);

  // Читаем содержимое файла в буфер content
  unsigned char *content = new char[filesize];
  fread(content, filesize, 1, stream);

  // Закрываем файл
  fclose(stream);

  unsigned char *p = NULL;
  int i = 0, j = 0;
  for(p = content, i = 0; i < filesize; p++, i++)
  {
     if(*p == arr[0])
     {
       // Если первый символ последовательности
       // найден, смотрим чему равны остальные символы
       int flag = 1;
       for(j = 1; j < sizeof(arr)/sizeof(arr[0]); j++)
       {
         if(*(p + j) != arr[j])
         {
           flag = 0;
           break;
         }
       }
       if(flag)
       {
         // Последовательность найдена, выводим 
         // смещение
         cout << "offset: " << i << endl;
         break;
       }
     }
  }

  // Освобождаем буфер
  delete [] content;

  return 0;
}

PS Это если файл не очень большой, так как приведённый выше код его полностью читает в оперативную память.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: