![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Неправильно читается файл [D7]
Igit © (2005-07-30 10:39:00)Здравтсвуйте Мастера. Вот проблема, бьюсь уже несколько дней, вроде с\все предельно просто но ошибки в упор невидно.
Мне необходимо прочитать файл, вот код
const
start_proc = $0042A6E4 - $00400C00;
end_proc = start_proc + 5;
var
i : Integer;
f : file of byte;
begin
assignfile(f, 'exe.exe');
reset(f);
For i:=start_proc to end_proc do
begin
if g>= Length(key) then g:=0;
Seek(f,i);
read(f, b);
memo1.Add(Int2Hex(i, 8)+': '+ Int2Hex(b, 2)+ #13#10);
end;
closefile(f);
Так вот. Здесь считывается сколько-то байт, но вайты он читает неправильно, в хекс редакторе по этим адресам лежат эти байты -
558BECB959, а в программе читаеются эти 5555165714. Проверял в хекс редакторе, последовательности 5555165714 в файле вообще не встречается!
Как прочитать правильные байты?
Anatoly Podgoretsky (2005-07-30 12:09:00) [1]Igit (30.07.05 11:30) [10]
Stream - поток
Leonid Troyanovsky (2005-07-30 11:34:00) [2]
> AlexWlad © (30.07.05 11:30) [9]
> Внутри TFileStream все через FileOpen,FileRead etc. ;)
Поэтому и удобней, что внутри ;)
--
Regards, LVT.
AlexWlad (2005-07-30 11:30:00) [3]Leonid Troyanovsky © (30.07.05 11:18) [5]
Внутри TFileStream все через FileOpen,FileRead etc. ;)
Igit (2005-07-30 11:30:00) [4]Все, разобрался окончательно, там у меня след функцией полсе ридера был еще write который тоже перемещал указатель... да, а я не знал что функции read/write перемещают указатель последовательно...
kami (2005-07-30 11:28:00) [5]Нуу... чуть - чуть ерунду сказал :)
for i:=0 to 5do=>to 4
Igit (2005-07-30 11:27:00) [6]Спасибо всем, убрал seek'алку как у kami и все заработало!
kami (2005-07-30 11:24:00) [7]А зачем каждый раз Seek`ать, если считывается все последовательно?
assignfile(f, 'projectz.exe');
reset(f);
Seek(f,start_proc);
For i:=start_proc to end_proc do
begin
read(f, b);
memo1.Lines.Add(IntToHex(i, 8)+': '+ IntToHex(b, 2)+ #13#10);
end;
closefile(f);
var
f:TFileStream
b:array[0..4] of byte;
begin
f:=TFileStream.Create('exe.exe',fmOpenRead);
f.Seek(Start_proc,soFromBeginning);
f.Read(b[0],5);
for i:=0 to 5 do
memo1.Lines.Add(IntToHex(i, 8)+': '+ IntToHex(b[i], 2)+ #13#10);
f.Free;
Leonid Troyanovsky (2005-07-30 11:18:00) [8]
> AlexWlad © (30.07.05 11:11) [4]
> Если файл бинарный, то лучше использовать FileOpen,FileRead
> etc.
TFileStream намного удобней.
--
Regards, LVT.
AlexWlad (2005-07-30 11:11:00) [9]Если файл бинарный, то лучше использовать FileOpen,FileRead etc.
Igit (2005-07-30 11:00:00) [10]Переменная b типа Byte. Всеравно неработает.
palva (2005-07-30 10:57:00) [11]Попробую угадать.
Переменная b должна иметь тип Byte а если она Integer, то ее надо предварительно обнулить.
Igit (2005-07-30 10:40:00) [12]забыл, эта строка лишняя if g>= Length(key) then g:=0;