В чем проблема? [ASM]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by FairHawk, 22 Jun 2010.

  1. FairHawk

    FairHawk Member

    Joined:
    16 Mar 2010
    Messages:
    46
    Likes Received:
    6
    Reputations:
    0
    Нужно найти адрес с байтом 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 ;
    
    В итоге не чего не меняеться, но гуд сообщение вылазиет
     
  2. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) ты и читаешь и пишешь по этому GENERIC_WRITE or GENERIC_READ надо
    2) invoke WriteFile,hFile,90h,1,ADDR SizeWrite,NULL ты указываешь значение того что записать, а не адрес. Нужно указать адрес памяти где лежит число 90h
    3) большие файлы читать по 1 байту это полный здец. ооочень медленно. Советую читать по 16 кластеров (если кластер 4096) в буфер и там искать. Это позволит достич наибольшей скорости считывания.
    Когдато столкнулся с такой вешью сам. Если читаешь данные кратные размеру кластера, то производительность увеличивается в несколько раз.
     
  4. FairHawk

    FairHawk Member

    Joined:
    16 Mar 2010
    Messages:
    46
    Likes Received:
    6
    Reputations:
    0
    slesh спс
    У меня такое же было, когда hex редактор писал, но уже на делфе. через FileStream читал по 16 байт, и записывал адрес, прога медленно работало. Зато если читать по 1024 или болльше то норм, но уже адреса не по 16 будут идти, а по 1024. Приходилось делить, и парсить =\

    PS. в данном случаи мну именно такой вариант нужен