Нужно найти адрес с байтом 50h, и заменить его на 90h Делаю так: Code: .data? hFile HANDLE ? hWnd HANDLE ? SizeWrite DWORD ? Addres DWORD ? start: invoke CreateFile,ADDR FileName,GENERIC_WRITE, FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL MOV hFile, Eax Mov Addres, 1400 search: invoke SetFilePointer,hFile,Addres,NULL,0 invoke ReadFile,hFile,Addres,1,EAX,NULL Cmp Eax, 50h JNZ Check INC Addres JMP search Check: invoke WriteFile,hFile,90h,1,ADDR SizeWrite,NULL invoke CloseHandle,hFile invoke MessageBox,hWnd,ADDR MsgOK,ADDR AppName,64 invoke ExitProcess,0 end Check end search end start ; В итоге не чего не меняеться, но гуд сообщение вылазиет
1) ты и читаешь и пишешь по этому GENERIC_WRITE or GENERIC_READ надо 2) invoke WriteFile,hFile,90h,1,ADDR SizeWrite,NULL ты указываешь значение того что записать, а не адрес. Нужно указать адрес памяти где лежит число 90h 3) большие файлы читать по 1 байту это полный здец. ооочень медленно. Советую читать по 16 кластеров (если кластер 4096) в буфер и там искать. Это позволит достич наибольшей скорости считывания. Когдато столкнулся с такой вешью сам. Если читаешь данные кратные размеру кластера, то производительность увеличивается в несколько раз.
slesh спс У меня такое же было, когда hex редактор писал, но уже на делфе. через FileStream читал по 16 байт, и записывал адрес, прога медленно работало. Зато если читать по 1024 или болльше то норм, но уже адреса не по 16 будут идти, а по 1024. Приходилось делить, и парсить =\ PS. в данном случаи мну именно такой вариант нужен