Help с программой
|
Новый участник Сообщения: 42 |
Профиль | Отправить PM | Цитировать Я начинаю только изучать делфи. Кое что освоил. Но вот задумал написать прогу. Как мне сделать,чтоб:открываем файл(бинарник),и чтоб прога начинала в нём искать заданные мною фрагменты в hex-формате. И потом найденные фрагменты надо вывести куда нибудь(в таблицу). И чтоб потом можно было заменить найденные франменты на свои. Помогите плиз
Для начала помогите с организацией поиска найденных заранее определённых кусков бинарника в таблицу. Как мне лучше будет искать изначально заданные фрагменты загруженного файла? Файл я открываю через файл. потоки: procedure TForm1.N2Click(Sender: TObject); begin if OpenDialog1.Execute then begin fs:=TFileStream.Create('111.bin', fmOpenReadWrite); end; end; |
|
Отправлено: 21:17, 22-11-2006 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать nemo555
По большому счёту принцип работы программы от языка не зависит. Прямая дорога к алгоритма поиска подстроки в строке. Я бы рекомендовал реализовать КМП (как самый попсовый) или сдвиг-или (как очень простой в реализации, если разобраться с его сутью. Но у него есть ограничение на длину искомой подстроки). Если файл заведомо меньше доступного объёма (виртуальной) памяти, то я бы банально считал его в память целиком для дальнейшего поиска требуемого фрагмента. |
------- Отправлено: 22:30, 22-11-2006 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Обратный инженер Сообщения: 644
|
Профиль | Отправить 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 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать DillerInc
Цитата:
|
|
------- Отправлено: 23:32, 22-11-2006 | #4 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Всем спасибо. Буду разгребать. Ещё вопросик. Как лучше сделать округление числа. Я использую ф-ю round. Но получается полное округление. А мне надо допустим до одной десятой. Пример: 12,5467845416216
Округлить надо до одной цифры после запятой. Через какую ф-ю сделать? |
|
Отправлено: 00:11, 03-12-2006 | #5 |
Ветеран Сообщения: 784
|
Профиль | Отправить PM | Цитировать round((12,5467845416216)*10) / 10 = 12,500000000000...
|
Отправлено: 09:43, 03-12-2006 | #6 |
Ветеран Сообщения: 881
|
Профиль | Отправить PM | Цитировать CyraxZ Молоток! Отсюда вывод - хочеш быть хорошим программистом, надо хорошо знать математику. :advice:
|
------- Отправлено: 12:56, 03-12-2006 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Система - Слежение за программой. | LINCOLN | Программное обеспечение Windows | 7 | 10-06-2009 02:07 | |
Пробелма с программой Protector Suite 5.6.2 | KTM | Хочу все знать | 4 | 12-02-2009 22:55 | |
Бред с программой | heruvim41 | Программное обеспечение Windows | 4 | 20-03-2007 08:45 | |
Помгите разобраться с программой | TarasBulba | Программирование и базы данных | 1 | 30-08-2002 22:26 |
|