Здравствуйте! Вот пытаюсь написать шаблон для патча. В принципе уже написал, проверил. Все работает. Но есть вопро по самому алгоритму патча. Я реализовал это таким образом: Код (Text): ; Задаем две строки. В первой адреса. Во втрой байты, которые по этим адресам должны быть записаны lFileOffset dd 596F0h,596F1h,596F2h,596F3h,596F4h,0 ;смещения для патча BytesToWrite db 8Bh,45h,0FCh,90,90 ;байты для патча ............................................................ ; ставим указатель на заданное смещение mov esi,0 ;в esi адрес смещения mov edi,0 ;в edi указатель на байт для патча Next_offset: mov eax,lFileOffset[esi] ;В еах очередной адрес для патча cmp eax,0 je write_OK invoke SetFilePointer,hFile,eax,NULL,FILE_BEGIN cmp eax,-1 jne @F mov ebx,offset szErrFilePtr call print_str jmp error ; если ошибка, то переход на сообщение о ошибке @@: ;---------------------------------------- ; Записываем байты в файл lea eax,BytesToWrite[edi] ; в еах указатель на байт из строки BytesToWrite invoke WriteFile,hFile,eax,1,offset lBytesWriten,NULL test eax,eax jne @F mov ebx,offset szErrWriteFile ; call print_str jmp error ; если ошибка, то переход на сообщение о ошибке @@: add esi,4 add edi,1 jmp Next_offset write_OK: Вроде все работает. Но мне кажется как то криво написан код. Подскажите как его можно записать более правильно. Я не слишком искушен в программировании, но код, написанный знающими людьми кажется простым, понятным и красивым. Мой код мне таким не кажется.
mov reg,0 <=> xor reg,reg cmp reg,0 <=> test reg,reg cmp reg,-1 <=> dec reg jz label inc reg add reg,1 <=> inc reg
Вроде получилось. Ты примерно это имел ввиду? mov eax,lFileOffset[esi*4] ................... lea eax,BytesToWrite[esi] Я просто с первого раза не догнал как одним регистром смещать указатель, то на один, то на четыре байта.
Asterix А почему, если не секрет?. И с какого размера файл можно считать большим? Я вот и спрашиваю, чтобы понять свои ошибки, чему-то научиться.
Sturgeon чтобы не повторятся рекомендую почитать в msdn справку по SetFilePointer, там написано и про размер файлов и есть примеры кода
Ну, 2-х гигабайт я думаю мне за глаза хватит Но в целом информация интересная. Если что, буду знать в каком направлении смотреть. Спасибо, что обратили мое внимание на этот момент.