Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2013, 00:54   #1
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание Патчинг файла

Доброго времени суток !
Возникла некая проблема в патчинге файла.

1) Есть файл 1.exe с кодом
Код:
var
  Form1: TForm1;
  signature:string='signature';
  _name:string='0000000000'; //для дебага что бы не потерялась сигнатура))
implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
ShowMessage('Hello '+'signature);
end;
задача была следующая найти строку signature в файле 1.exe и поменять на свою, казалось бы все просто но, возникла следующая бага. Патчатся лишнее байты !!!!

скрин до
скрин после

сам код программы патча:
Код:
procedure patch;
var
 FileName, oldstring, newstring, s: string;
 f: file;
 l: Longint;
 go:boolean;
begin
 FileName := '1.exe';
 oldstring := 'signature';
 newstring := '111111111';
 s := oldstring;
 AssignFile(f, FileName);
 Reset(f, 2);
 l:=0;
 go:=true;
 while (l<=(FileSize(f) - Length(oldstring) - 1)) and go do
  begin
   Seek(f, l);
   BlockRead(f, oldstring[1], Length(oldstring));
   if oldstring = s then
    begin
     seek(f, l);
     BlockWrite(f, newstring[1], Length(newstring));
     go:=false;
    end;
   inc(l);
  end;
 CloseFile(f);
end;
В чем проблема ? уже не знаю что и придумать, по коду все гуд а затрагивает лишнее !
fucil вне форума Ответить с цитированием
Старый 16.11.2013, 01:12   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,864
По умолчанию

Reset(f, 2); - а с чего вдруг размер записи равен двум?
Arigato вне форума Ответить с цитированием
Старый 16.11.2013, 02:14   #3
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Радость

Цитата:
Сообщение от Arigato Посмотреть сообщение
Reset(f, 2); - а с чего вдруг размер записи равен двум?
ЛОЛ я прочитал это так: открываем файл как двоичный для записи в него (Reset(f, 2) (одну запись определяем как два байта)
Я ещё и думал что не может быть, но нужное патчило правильно, вот и не трогал. СПС все ок!
fucil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Патчинг ехе из DLL Lauri Общие вопросы Delphi 15 31.05.2012 17:02
Программа, корректировки файла записей, на примере файла по группе студентов. S.T.A.L.K.E.R.20 Помощь студентам 14 10.05.2011 18:02
Патчинг байт памяти процесса CyberMaster C# (си шарп) 2 25.04.2011 19:42
Перед открытием файла программа должна спрашивать адрес файла Belii09878 Помощь студентам 1 07.03.2010 16:37
Перезапись файла без путя или определение расположения файла программы The Best Общие вопросы Delphi 4 13.07.2009 22:50