помогите найти ошибку: ======= .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); } важно именно самим написать а не просто сделать дизасм. нид хелп.
ошибка: инструкция по адресу обратилась .... память не может быть 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 - в результате тоже самое
по моему ошибка тут на самом деле: buf BYTE 20000 DUP(?) как исправить это чтобы можно было written success сделать?
в секцию кода нельзя писать. Или явно поставь разрешение на запись (ключами линкеру - поиск по форуму) или перенеси все перезаписываемые переменные в секцию .data