Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

Неправильно читается файл   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.058 c
14-1122399553
БарЛог
2005-07-26 21:39
2005.08.21
Стихи


1-1122847553
wp2
2005-08-01 02:05
2005.08.21
Очередная ошибка точности???!!!


1-1123066555
Гость22
2005-08-03 14:55
2005.08.21
Как слелать текст на форме мигающим?


1-1123077939
Vitali
2005-08-03 18:05
2005.08.21
Временное зависание Delphi


14-1122487440
Starcom
2005-07-27 22:04
2005.08.21
Как узнать кто аттакует?