asm c++ fread

Тема в разделе "WASM.BEGINNERS", создана пользователем ltshck, 2 дек 2007.

  1. ltshck

    ltshck New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    195
    помогите найти ошибку:

    =======
    .386
    .model flat, stdcall

    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib

    include msvcrt.inc
    includelib msvcrt.lib


    .code
    error DB 13,10,"Error!",0
    mode DB "rb",0

    t DB "test.exe",0

    buf BYTE 20000 DUP(?)

    fsize DD 25

    start:
    invoke fopen, offset t, offset mode
    mov ebx,eax
    jz @err
    lea ecx, buf

    invoke fread, ecx, 1, fsize, ebx ; тут возникает ошибка... почему?
    jz @err

    @err:
    invoke printf, offset error
    ret
    end start

    ====

    хочу повторить файл на с++ на асме.
    вот сишный код:

    #include <stdio.h>

    char buf[20000];

    int main()
    {
    FILE *f = fopen("test.exe","rb");

    fread(buf,1,0x600,f);

    fclose(f);

    printf("%s\n",buf);
    }

    важно именно самим написать а не просто сделать дизасм.

    нид хелп.
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.351
    что за ошибка?
     
  3. ltshck

    ltshck New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    195
    ошибка: инструкция по адресу обратилась .... память не может быть written

    место: именно fread

    что не так?

    переделал вот так:

    .386
    .model flat, stdcall
    include \masm32\include\kernel32.inc
    includelib \masm32\lib\kernel32.lib
    include msvcrt.inc
    includelib msvcrt.lib

    .code
    mode DB "rb",0
    fname DB "test.txt",0
    buf BYTE 20000 DUP(?)
    fsize DD 600h
    fstr DB "%s",0

    start:
    invoke fopen, offset fname, offset mode
    invoke fread, offset buf, 1, fsize, eax
    invoke fclose, eax
    invoke printf, offset fstr, offset buf
    ret
    end start


    - в результате тоже самое
     
  4. ltshck

    ltshck New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    195
    по моему ошибка тут на самом деле:

    buf BYTE 20000 DUP(?)

    как исправить это чтобы можно было written success сделать? :)
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.351
    в секцию кода нельзя писать.
    Или явно поставь разрешение на запись (ключами линкеру - поиск по форуму) или перенеси все перезаписываемые переменные в секцию .data
     
  6. ltshck

    ltshck New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2007
    Сообщения:
    195
    ага. супер. спасибо.