format ELF include "public_stdcall.inc" section '.text' executable public_stdcall _msys_read_file,20 ;arg1 - file name ;arg2 - file offset ;arg3 - size to read ;arg4 - data ;arg5 - file size push ebp mov ebp,esp xor eax,eax mov [file_struct.operation],eax mov eax,[ebp+12] mov [file_struct.offset],eax mov eax,[ebp+16] mov [file_struct.size],eax mov eax,[ebp+20] mov [file_struct.data],eax mov [file_struct.temp_buffer],temp_buffer mov edx,[ebp+8] call copy_file_name push ebx mov ebx,file_struct mov eax,58 int 0x40 mov ecx,[ebp+24] test ecx,ecx jz .no_file_size mov [ecx],ebx .no_file_size: pop ebx pop ebp ret 20 copy_file_name: push esi edi cld mov edi,edx xor eax,eax xor ecx,ecx dec ecx repnz scasb not ecx mov edi,file_struct.path mov esi,edx rep movsb pop edi esi ret public_stdcall _msys_write_file,12 ;arg1 - file name ;arg2 - size ;arg3 - data push ebp mov ebp,esp xor eax,eax mov [file_struct.offset],eax inc eax mov [file_struct.operation],eax mov eax,[ebp+12] mov [file_struct.size],eax mov eax,[ebp+16] mov [file_struct.data],eax mov [file_struct.temp_buffer],temp_buffer mov edx,[ebp+8] call copy_file_name push ebx mov eax,58 mov ebx,file_struct int 0x40 pop ebx pop ebp ret 12 public_stdcall _msys_run_program,8 ;arg1 - program name ;arg2 - parameters push ebp mov ebp,esp mov [file_struct.operation],16 xor eax,eax mov [file_struct.offset],eax mov [file_struct.data],eax mov eax,[ebp+12] mov [file_struct.param],eax mov [file_struct.temp_buffer],temp_buffer; mov edx,[ebp+8] call copy_file_name push ebx mov eax,58 mov ebx,file_struct int 0x40 pop ebx pop ebp ret 8 section '.bss' writeable file_struct: .operation rd 1 .offset rd 1 .param: .size rd 1 .data rd 1 .temp_buffer rd 1 .path rb 1024 temp_buffer rb 4096