Как в fasm - е перенаправить вывод консольной утили в файл _rez.txt

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 13 авг 2008.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Добрый день.
    Перехоже на fasm.
    Хотел перенаправить вывод консольной утили в файл _rez.txt
    На masm - е было так ...
    Код (Text):
    1.     .data
    2.       tmp       db 'Hello world!!!',0 ; буфер командной строки
    3.       lf        db 13,10,0
    4.     .code
    5.  
    6.     start:
    7.     invoke StdOut,ADDR tmp
    8.     invoke StdOut,ADDR lf  
    9.     invoke ExitProcess,0
    10.     end start
    Запускаем ...
    Код (Text):
    1. c:\ _m.exe > rez.txt
    2.  
    3. rez.txt
    4. Hello world!!!
    Теперь в fasm

    Код (Text):
    1. format PE console
    2. include 'C:\fasmw\INCLUDE\win32a.inc'
    3. entry start
    4. section '.data' data readable writeable
    5.  
    6.  
    7. ;--------------------------------------------------------
    8.     tmp db 'Hello world!!!',0
    9.     lf  db 13,10,0
    10.     hout    dd 0
    11.     ns  dd ?
    12. ;--------------------------------------------------------
    13. section '.code' code readable writeable executable
    14. start:
    15.     push    STD_OUTPUT_HANDLE
    16.     call    [GetStdHandle]
    17.     mov [hout],eax
    18.  
    19.     lea ebx, [tmp]
    20.     push    ebx
    21.     call    [lstrlen]
    22.  
    23.     push    0
    24.     push    [ns]
    25.     push    eax
    26.     lea ebx, [tmp]
    27.     push    ebx
    28.     push    [hout]
    29.     call    [WriteConsole]
    30.  
    31.     push    0
    32.     push    [ns]
    33.     push    2
    34.     lea ebx, [lf]
    35.     push    ebx
    36.     push    [hout]
    37.     call    [WriteConsole]
    38.  
    39.     call    [ExitProcess]
    40.  
    41. ;-----------------------------------------------------------------------------------------
    42. section '.idata' import data readable writeable
    43.  
    44.  library kernel32,'KERNEL32.DLL',\
    45.         user32,'USER32.DLL'
    46.  
    47.  include 'C:\fasmw\INCLUDE\APIA\kernel32.inc'
    48.  include 'C:\fasmw\INCLUDE\APIA\user32.inc'
    Код (Text):
    1. c:\ _f.exe > rez.txt
    2.  
    3. rez.txt
    4. [ПУСТО] <----!!!!
    Вопрос - как в fasm - е организовать перенаправление в файл результатов работы консольного приложения?
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    попробуй вместо WriteConsole использовать WriteFile
    и это надо писать push ns, а не push [ns], и у тебя перед вызовом ExitProcess ему параметр не передается
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    nobodyzzz
    а чего-то подобного stdout в fasm - е нет разве? это ж у удобно!
     
  4. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    нету, а StdOut реализован в masm32.lib и там используется WriteFile =))
    Код (Text):
    1. .text:00000000 _StdOut@4       proc near               ; DATA XREF: StdOut(x)+1Bo
    2. .text:00000000
    3. .text:00000000 nNumberOfBytesToWrite= dword ptr -0Ch
    4. .text:00000000 NumberOfBytesWritten= dword ptr -8
    5. .text:00000000 hFile           = dword ptr -4
    6. .text:00000000 lpBuffer        = dword ptr  8
    7. .text:00000000
    8. .text:00000000                 push    ebp
    9. .text:00000001                 mov     ebp, esp
    10. .text:00000003                 add     esp, 0FFFFFFF4h
    11. .text:00000006                 push    0FFFFFFF5h      ; nStdHandle
    12. .text:00000008                 call    _GetStdHandle@4 ; GetStdHandle(x)
    13. .text:0000000D                 mov     [ebp+hFile], eax
    14. .text:00000010                 push    [ebp+lpBuffer]
    15. .text:00000013                 call    _StrLen@4       ; StrLen(x)
    16. .text:00000018                 mov     [ebp+nNumberOfBytesToWrite], eax
    17. .text:0000001B                 push    offset _StdOut@4 ; lpOverlapped
    18. .text:0000001D                 lea     eax, [ebp+NumberOfBytesWritten]
    19. .text:00000020                 push    eax             ; lpNumberOfBytesWritten
    20. .text:00000021                 push    [ebp+nNumberOfBytesToWrite] ; nNumberOfBytesToWrite
    21. .text:00000024                 push    [ebp+lpBuffer]  ; lpBuffer
    22. .text:00000027                 push    [ebp+hFile]     ; hFile
    23. .text:0000002A                 call    _WriteFile@20   ; WriteFile(x,x,x,x,x)
    24. .text:0000002F                 mov     eax, [ebp+NumberOfBytesWritten]
    25. .text:00000032                 leave
    26. .text:00000033                 retn    4
    27. .text:00000033 _StdOut@4       endp
     
  5. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    спасибо
    А как в проекте на fasm подключать masm - овские библиотеки
     
  6. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    http://board.flatassembler.net/topic.php?t=8511 Тут пофтыкай =))