Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.034 c
1-1122903827
MaxNq
2005-08-01 17:43
2005.08.21
Panel


1-1123058496
Aleksandr.
2005-08-03 12:41
2005.08.21
Как перевести соотношение точек объекта к точкам принтера?


14-1122186004
syte_ser78
2005-07-24 10:20
2005.08.21
Как я ровел выходные (часть Х)


3-1121079216
llirik
2005-07-11 14:53
2005.08.21
rename column


4-1120460219
Alex Che
2005-07-04 10:56
2005.08.21
как определить размер зерна монитора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский