Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Вниз
Неправильно читается файл Найти похожие ветки
← →
Igit (2005-07-30 10:39) [0]Здравтсвуйте Мастера. Вот проблема, бьюсь уже несколько дней, вроде с\все предельно просто но ошибки в упор невидно.
Мне необходимо прочитать файл, вот код
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 в файле вообще не встречается!
Как прочитать правильные байты?
← →
Igit (2005-07-30 10:40) [1]забыл, эта строка лишняя if g>= Length(key) then g:=0;
← →
palva © (2005-07-30 10:57) [2]Попробую угадать.
Переменная b должна иметь тип Byte а если она Integer, то ее надо предварительно обнулить.
← →
Igit (2005-07-30 11:00) [3]Переменная b типа Byte. Всеравно неработает.
← →
AlexWlad © (2005-07-30 11:11) [4]Если файл бинарный, то лучше использовать FileOpen,FileRead etc.
← →
Leonid Troyanovsky © (2005-07-30 11:18) [5]
> AlexWlad © (30.07.05 11:11) [4]
> Если файл бинарный, то лучше использовать FileOpen,FileRead
> etc.
TFileStream намного удобней.
--
Regards, LVT.
← →
kami © (2005-07-30 11:24) [6]А зачем каждый раз 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;
← →
Igit (2005-07-30 11:27) [7]Спасибо всем, убрал seek"алку как у kami и все заработало!
← →
kami © (2005-07-30 11:28) [8]Нуу... чуть - чуть ерунду сказал :)
for i:=0 to 5 do
=>to 4
← →
AlexWlad © (2005-07-30 11:30) [9]Leonid Troyanovsky © (30.07.05 11:18) [5]
Внутри TFileStream все через FileOpen,FileRead etc. ;)
← →
Igit (2005-07-30 11:30) [10]Все, разобрался окончательно, там у меня след функцией полсе ридера был еще write который тоже перемещал указатель... да, а я не знал что функции read/write перемещают указатель последовательно...
← →
Leonid Troyanovsky © (2005-07-30 11:34) [11]
> AlexWlad © (30.07.05 11:30) [9]
> Внутри TFileStream все через FileOpen,FileRead etc. ;)
Поэтому и удобней, что внутри ;)
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2005-07-30 12:09) [12]Igit (30.07.05 11:30) [10]
Stream - поток
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c