Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неправильно читается файл [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо