MASM32 - как работать с файлами ?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Welemir, 8 Aug 2010.

  1. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Ммм,а на масм как можно открывать,писать,выводить из файла ? без огромного вин32 листинга:( из учебника Пирогова.
     
  2. Catbert

    Catbert Banned

    Joined:
    29 Jun 2010
    Messages:
    80
    Likes Received:
    27
    Reputations:
    10
    Code:
    .486
    .model flat, stdcall
    option casemap :none
    
     include \masm32\include\windows.inc
     include \masm32\include\user32.inc
     include \masm32\include\kernel32.inc
     include \masm32\macros\macros.asm
     include \masm32\macros\windows.asm
    
     includelib \masm32\lib\user32.lib
     includelib \masm32\lib\kernel32.lib
    
    .data
      text db "some text 123",0
      flen dd 0
    .data?
      h DWORD ?
      buf DWORD ?
      br DWORD ?
    
    .code
    
    start:
    
      invoke CreateFile,chr$("test.txt"),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
      mov h,eax
      invoke lstrlen,offset text
      invoke WriteFile,h,offset text,eax,offset br,0
      invoke CloseHandle,h
      
      invoke CreateFile,chr$("test.txt"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
      mov h,eax
      invoke GetFileSize,h,NULL
      mov flen,eax
      invoke VirtualAlloc,NULL,flen,MEM_COMMIT,PAGE_READWRITE
      mov buf,eax
      invoke ReadFile,h,buf,flen,offset br,NULL
      invoke CloseHandle,h
      
      invoke MessageBox,0,buf,chr$("FILE"),0
      
      
      invoke ExitProcess,0
      
    end start
    
    
     
  3. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Пара вопросов,если можно:

    1) Что означает option:casemap ? Нигде об этом не пишут :(.Как это влияет на программу ?

    2) Что такое chr$ ?

    3) Эм, можно ли использовать вместо оффсета addr или lea ?
     
  4. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Откуда фаил windows.asm взять ? У меня его нет:(
     
  5. Catbert

    Catbert Banned

    Joined:
    29 Jun 2010
    Messages:
    80
    Likes Received:
    27
    Reputations:
    10
    1. Директива option нужна для задания некоторых настроек компиляции. Опция casemap задаёт чувствительность к регистру символов. Мы указали none, тем самым установили чувствительность к регистру символов. (c) гугл
    2. макрос
    3. обычно addr для локальных, offset для глобальных.

    windows.asm на wasm.ru валялся
     
  6. Welemir

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

    Joined:
    10 Jan 2008
    Messages:
    229
    Likes Received:
    11
    Reputations:
    -4
    Грасиаз.Топ клоуз :)