WriteFile Помогите!

Тема в разделе "WASM.BEGINNERS", создана пользователем pikador, 29 янв 2008.

  1. pikador

    pikador New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2007
    Сообщения:
    101
    Код выполняется, но в файл ничего не пишется.
    Помогите, обьясните что я не так написал?:

    Код (Text):
    1.         push 0
    2.         push 80h
    3.         push 3
    4.         push 0
    5.         push 1h
    6.         push 80000000h
    7.         push strn
    8.         call CreateFileA@28
    9.         mov hVxD,eax
    10.        
    11.         push 0
    12.         push 0
    13.         push 0
    14.         push hVxD
    15.         call SetFilePointer@16
    16.        
    17.         push 0
    18.         push offset tmp1
    19.         push 3
    20.         push offset evil
    21.         push hVxD
    22.         call WriteFile@20
    23.        
    24.         cmp eax,0
    25.         jne OKKKK
    26.         push 0
    27.         push strn
    28.         push strn
    29.         push 0
    30.         call MessageBoxA@16
    31.         OKKKK:
    32.  
    33.         push hVxD
    34.         call CloseHandle@4
     
  2. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    Открываем файл:
    Код (Text):
    1. invoke CreateFile,$CTA0("data.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h
    2. mov hFile_data,eax
    Ставим указатель чтения/записи:
    Код (Text):
    1. invoke SetFilePointer,hhFile_data,10h,0h,FILE_BEGIN
    Пишем в файл:
    Код (Text):
    1. invoke WriteFile,hFile_data,offset buf,2h,offset flbytes,0h
    Закрываем файл:
    Код (Text):
    1. invoke CloseHandle,hFile_data
    Вот и всё!!!

    Если у тебя в файл ничего не пишется, то первое что приходит в голову:
    "А может быть он не окрывается?"
    Второе что приходит в голову:
    "Если он открывается, то наверное что-то с функцией WriteFile или с её параметрами?"

    И вообще что за синтаксис такой дурацкий - push, push...??? Так ничего большого не напишешь!!!
    И ещё скачай OllyDbg - прямо тут где-то валялась - очень удобно, если пишешь на Assembler'е!!!
     
  3. pikador

    pikador New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2007
    Сообщения:
    101
    Я бы рад от пушей отказаться но сам дядя Masm на меня ругается:

    Код (Text):
    1. invoke CreateFile,$CTA0("data.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h
    2.  
    3. Microsoft (R) Macro Assembler Version 6.14.8444
    4. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    5.  
    6.  Assembling: pr.asm
    7. pr.asm(402) : error A2006: undefined symbol : CreateFile
    8. Microsoft (R) Incremental Linker Version 5.12.8078
    9. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    10.  
    11. LINK : fatal error LNK1181: cannot open input file "pr.obj"
    12. Press any key to continue . . .
    Код (Text):
    1. invoke CreateFileA@28,$CTA0("data.txt"),GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0h,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0h
    2.  
    3. Microsoft (R) Macro Assembler Version 6.14.8444
    4. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    5.  
    6.  Assembling: pr.asm
    7. pr.asm(402) : error A2190: INVOKE requires prototype for procedure
    8. Microsoft (R) Incremental Linker Version 5.12.8078
    9. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    10.  
    11. LINK : fatal error LNK1181: cannot open input file "pr.obj"
    12. Press any key to continue . . .
     
  4. Meatcoins

    Meatcoins New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2007
    Сообщения:
    178
    А как там на счёт подключаемых модулей???
    invoke - это по сути макрос...
    $CTA0 - это тоже...

    С помощью макросов мы делаем Assembler могучим как C++!!! При этом сохраняем основное преимущество - наши программули бешенно быстрые!!!

    Кстати вместо jne, je и т.д. на мой взгляд лучше использовать .if ... .else ... .endif!!!

    Код (Text):
    1.             .386
    2.             .model flat, stdcall
    3.              option casemap :none
    4.              include E:\masm32\include\windows.inc
    5.              include E:\masm32\include\kernel32.inc
    6.              include E:\masm32\include\user32.inc
    7.              includelib E:\masm32\lib\kernel32.lib
    8.              includelib E:\masm32\lib\user32.lib
    9.              include E:\masm32\macros\Strings.mac
    10.              include E:\masm32\include\w2k\ntstatus.inc
    11.              include E:\masm32\include\w2k\native.inc
    12.              include E:\masm32\include\w2k\ntdll.inc          
    13.              includelib E:\masm32\lib\w2k\ntdll.lib
    14. .const
    15. .data
    16. .data?
    17. .code
    18. _start:
    19. invoke MessageBox,0h,$CTA0("api"),$CTA0("api"),MB_OK
    20. invoke ExitProcess,0h
    21. end _start
     
  5. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    pikador
    Подключи соответствующие инки и либы.
    типа masm.lib,inc,windows.inc
     
  6. pikador

    pikador New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2007
    Сообщения:
    101
    Поключил! Орет на параметры. Подключил, все что сказали:
    Код (Text):
    1. ;INCLUDELIB c:\masm32\lib\windows.lib
    2. ;INCLUDE       c:\masm32\include\windows.inc
    3. includelib c:\masm32\lib\shlwapi.lib
    4. include    c:\masm32\include\shlwapi.inc
    5.  
    6. INCLUDE       c:\masm32\include\user32.inc
    7. includelib c:\masm32\lib\user32.lib
    8.  
    9. INCLUDE       c:\masm32\include\kernel32.inc
    10. includelib c:\masm32\lib\kernel32.lib
    11.  
    12. include c:\masm32\include\shell32.inc
    13. includelib c:\masm32\lib\shell32.lib
    14.  
    15. include c:\masm32\include\masm32.inc
    16. includelib c:\masm32\lib\masm32.lib
    17.  
    18.  
    19. Microsoft (R) Macro Assembler Version 6.14.8444
    20. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    21.  
    22.  Assembling: pr.asm
    23. pr.asm(419) : error A2006: undefined symbol : FILE_ATTRIBUTE_NORMAL
    24. pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 6
    25. pr.asm(419) : error A2006: undefined symbol : CREATE_ALWAYS
    26. pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 5
    27. pr.asm(419) : error A2006: undefined symbol : FILE_SHARE_READ
    28. pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 3
    29. pr.asm(419) : error A2206: missing operator in expression
    30. pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 2
    31. pr.asm(419) : error A2006: undefined symbol : $CTA0
    32. pr.asm(419) : error A2114: INVOKE argument type mismatch : argument : 1
    33. Microsoft (R) Incremental Linker Version 5.12.8078
    34. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    35.  
    36. LINK : fatal error LNK1181: cannot open input file "pr.obj"
    37. Press any key to continue . . .
    Но только без windows, если подключать то:
    Код (Text):
    1. Microsoft (R) Macro Assembler Version 6.14.8444
    2. Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.
    3.  
    4.  Assembling: pr.asm
    5. c:\masm32\include\windows.inc(115) : error A2004: symbol type conflict : bool
    6. c:\masm32\include\windows.inc(8052) : error A2179: structure improperly initiali
    7. zed
    8. c:\masm32\include\windows.inc(8052) : error A2008: syntax error : in structure
    9. c:\masm32\include\windows.inc(8064) : error A2179: structure improperly initiali
    10. zed
    11. c:\masm32\include\windows.inc(8064) : error A2008: syntax error : in structure
    12. c:\masm32\include\windows.inc(8082) : error A2005: symbol redefinition : hinst
    13. c:\masm32\include\windows.inc(8772) : error A2179: structure improperly initiali
    14. zed
    15. c:\masm32\include\windows.inc(8772) : error A2008: syntax error : in structure
    16. c:\masm32\include\windows.inc(8779) : error A2179: structure improperly initiali
    17. zed
    18. c:\masm32\include\windows.inc(8779) : error A2008: syntax error : in structure
    19. c:\masm32\include\windows.inc(8784) : error A2179: structure improperly initiali
    20. zed
    21. c:\masm32\include\windows.inc(8784) : error A2008: syntax error : in structure
    22. c:\masm32\include\windows.inc(8790) : error A2179: structure improperly initiali
    23. zed
    24. c:\masm32\include\windows.inc(8790) : error A2008: syntax error : in structure
    25. c:\masm32\include\windows.inc(8797) : error A2179: structure improperly initiali
    26. zed
    27. c:\masm32\include\windows.inc(8797) : error A2008: syntax error : in structure
    28. c:\masm32\include\windows.inc(8807) : error A2179: structure improperly initiali
    29. zed
    30. c:\masm32\include\windows.inc(8807) : error A2008: syntax error : in structure
    31. c:\masm32\include\windows.inc(8813) : error A2179: structure improperly initiali
    32. zed
    33. c:\masm32\include\windows.inc(8813) : error A2008: syntax error : in structure
    34. c:\masm32\include\windows.inc(8820) : error A2179: structure improperly initiali
    35. zed
    36. c:\masm32\include\windows.inc(8820) : error A2008: syntax error : in structure
    37. c:\masm32\include\windows.inc(9066) : error A2179: structure improperly initiali
    38. zed
    39. c:\masm32\include\windows.inc(9066) : error A2008: syntax error : in structure
    40. c:\masm32\include\windows.inc(9954) : error A2179: structure improperly initiali
    41. zed
    42. c:\masm32\include\windows.inc(9954) : error A2008: syntax error : in structure
    43. c:\masm32\include\windows.inc(9967) : error A2179: structure improperly initiali
    44. zed
    45. c:\masm32\include\windows.inc(9967) : error A2008: syntax error : in structure
    46. c:\masm32\include\windows.inc(9979) : error A2179: structure improperly initiali
    47. zed
    48. c:\masm32\include\windows.inc(9979) : error A2008: syntax error : in structure
    49. c:\masm32\include\windows.inc(9984) : error A2179: structure improperly initiali
    50. zed
    51. c:\masm32\include\windows.inc(9984) : error A2008: syntax error : in structure
    52. c:\masm32\include\windows.inc(9989) : error A2179: structure improperly initiali
    53. zed
    54. c:\masm32\include\windows.inc(9989) : error A2008: syntax error : in structure
    55. c:\masm32\include\windows.inc(9994) : error A2179: structure improperly initiali
    56. zed
    57. c:\masm32\include\windows.inc(9994) : error A2008: syntax error : in structure
    58. c:\masm32\include\windows.inc(9999) : error A2179: structure improperly initiali
    59. zed
    60. c:\masm32\include\windows.inc(9999) : error A2008: syntax error : in structure
    61. c:\masm32\include\windows.inc(10006) : error A2179: structure improperly initial
    62. ized
    63. c:\masm32\include\windows.inc(10006) : error A2008: syntax error : in structure
    64. c:\masm32\include\windows.inc(10013) : error A2179: structure improperly initial
    65. ized
    66. c:\masm32\include\windows.inc(10013) : error A2008: syntax error : in structure
    67. c:\masm32\include\windows.inc(10020) : error A2179: structure improperly initial
    68. ized
    69. c:\masm32\include\windows.inc(10020) : error A2008: syntax error : in structure
    70. c:\masm32\include\windows.inc(10025) : error A2179: structure improperly initial
    71. ized
    72. c:\masm32\include\windows.inc(10025) : error A2008: syntax error : in structure
    73. c:\masm32\include\windows.inc(10031) : error A2179: structure improperly initial
    74. ized
    75. c:\masm32\include\windows.inc(10031) : error A2008: syntax error : in structure
    76. c:\masm32\include\windows.inc(10039) : error A2179: structure improperly initial
    77. ized
    78. c:\masm32\include\windows.inc(10039) : error A2008: syntax error : in structure
    79. c:\masm32\include\windows.inc(10040) : error A2179: structure improperly initial
    80. ized
    81. c:\masm32\include\windows.inc(10040) : error A2008: syntax error : in structure
    82. c:\masm32\include\windows.inc(10044) : error A2179: structure improperly initial
    83. ized
    84. c:\masm32\include\windows.inc(10044) : error A2008: syntax error : in structure
    85. c:\masm32\include\windows.inc(10050) : error A2179: structure improperly initial
    86. ized
    87. c:\masm32\include\windows.inc(10050) : error A2008: syntax error : in structure
    88. c:\masm32\include\windows.inc(10057) : error A2179: structure improperly initial
    89. ized
    90. c:\masm32\include\windows.inc(10057) : error A2008: syntax error : in structure
    91. c:\masm32\include\windows.inc(10064) : error A2179: structure improperly initial
    92. ized
    93. c:\masm32\include\windows.inc(10064) : error A2008: syntax error : in structure
    94. c:\masm32\include\windows.inc(10069) : error A2179: structure improperly initial
    95. ized
    96. c:\masm32\include\windows.inc(10069) : error A2008: syntax error : in structure
    97. c:\masm32\include\windows.inc(10077) : error A2179: structure improperly initial
    98. ized
    99. c:\masm32\include\windows.inc(10077) : error A2008: syntax error : in structure
    100. c:\masm32\include\windows.inc(10084) : error A2179: structure improperly initial
    101. ized
    102. c:\masm32\include\windows.inc(10084) : error A2008: syntax error : in structure
    103. c:\masm32\include\windows.inc(10092) : error A2179: structure improperly initial
    104. ized
    105. c:\masm32\include\windows.inc(10092) : error A2008: syntax error : in structure
    106. c:\masm32\include\windows.inc(10099) : error A2179: structure improperly initial
    107. ized
    108. c:\masm32\include\windows.inc(10099) : error A2008: syntax error : in structure
    109. c:\masm32\include\windows.inc(10109) : error A2179: structure improperly initial
    110. ized
    111. c:\masm32\include\windows.inc(10109) : error A2008: syntax error : in structure
    112. c:\masm32\include\windows.inc(10110) : error A2179: structure improperly initial
    113. ized
    114. c:\masm32\include\windows.inc(10110) : error A2008: syntax error : in structure
    115. c:\masm32\include\windows.inc(10114) : error A2179: structure improperly initial
    116. ized
    117. c:\masm32\include\windows.inc(10114) : error A2008: syntax error : in structure
    118. c:\masm32\include\windows.inc(10115) : error A2179: structure improperly initial
    119. ized
    120. c:\masm32\include\windows.inc(10115) : error A2008: syntax error : in structure
    121. c:\masm32\include\windows.inc(10120) : error A2179: structure improperly initial
    122. ized
    123. c:\masm32\include\windows.inc(10120) : error A2008: syntax error : in structure
    124. c:\masm32\include\windows.inc(10126) : error A2179: structure improperly initial
    125. ized
    126. c:\masm32\include\windows.inc(10126) : error A2008: syntax error : in structure
    127. c:\masm32\include\windows.inc(10133) : error A2179: structure improperly initial
    128. ized
    129. c:\masm32\include\windows.inc(10133) : error A2008: syntax error : in structure
    130. c:\masm32\include\windows.inc(10140) : error A2179: structure improperly initial
    131. ized
    132. c:\masm32\include\windows.inc(10140) : error A2008: syntax error : in structure
    133. c:\masm32\include\windows.inc(10146) : error A2179: structure improperly initial
    134. ized
    135. c:\masm32\include\windows.inc(10146) : error A2008: syntax error : in structure
    136. c:\masm32\include\windows.inc(10157) : error A2179: structure improperly initial
    137. ized
    138. c:\masm32\include\windows.inc(10157) : error A2008: syntax error : in structure
    139. c:\masm32\include\windows.inc(10165) : error A2179: structure improperly initial
    140. ized
    141. c:\masm32\include\windows.inc(10165) : error A2008: syntax error : in structure
    142. c:\masm32\include\windows.inc(10176) : error A2179: structure improperly initial
    143. ized
    144. c:\masm32\include\windows.inc(10176) : error A2008: syntax error : in structure
    145. c:\masm32\include\windows.inc(10188) : error A2179: structure improperly initial
    146. ized
    147. c:\masm32\include\windows.inc(10188) : error A2008: syntax error : in structure
    148. c:\masm32\include\windows.inc(10196) : error A2179: structure improperly initial
    149. ized
    150. c:\masm32\include\windows.inc(10196) : error A2008: syntax error : in structure
    151. c:\masm32\include\windows.inc(10204) : error A2179: structure improperly initial
    152. ized
    153. c:\masm32\include\windows.inc(10204) : error A2008: syntax error : in structure
    154. c:\masm32\include\windows.inc(10215) : fatal error A1012: error count exceeds 10
    155. 0; stopping assembly
    156. Microsoft (R) Incremental Linker Version 5.12.8078
    157. Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
    158.  
    159. LINK : fatal error LNK1181: cannot open input file "pr.obj"
    160. Press any key to continue . . .
     
  7. deadly83

    deadly83 New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2007
    Сообщения:
    71
    Код (ASM):
    1. invoke CreateFile, &filename, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE,0
    2.         mov filehandle,eax
    3.         mov ebx,numbytes; кол-во байтов которое нужно записать в файл
    4. loo:              
    5.         invoke WriteFile,filehandle,&buffer1,ebx,&wbytes,0
    6.         cmp wbytes,ebx; кол-во байтов для теста все ли байты записаны
    7.         jne loo
    Может криво, это не претендует на красивый код, зато все ясно работает 100% потому что сам в свою прогу вставил в принцыпе у меня не возникло вопрос в апи для дельфи эти функции описаны нормально, всякие GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE есть inc файлах и lib файлах, если знать числовые значения можно и без этих слов обойтись
    удачи должно теперь получиться.
     
  8. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    Перед подключением windows.inc надо добавить:
    Код (Text):
    1. option casemap:none
     
  9. pikador

    pikador New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2007
    Сообщения:
    101
    Эх... В чем еще может быть проблема?
    Первый пример выполняется, но опять же в файл ничего не записалось...
    Второй же висит (и понятно почему... в цикле пишет)...

    Код (Text):
    1.                 ; ПЕРВЫЙ ПРИМЕР
    2.         ;invoke CreateFile,strn,GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0
    3.         ;mov hVxD,eax
    4.         ;invoke SetFilePointer,hVxD,0h,0h,FILE_BEGIN
    5.         ;invoke WriteFile,hVxD,offset evil,2h,offset tmp1,0h
    6.        
    7.             ; ВТОРОЙ ПРИМЕР
    8.         invoke CreateFile,strn,GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0
    9.         mov hVxD,eax
    10.         mov ebx,3; кол-во байтов которое нужно записать в файл
    11.  
    12. loo:              
    13.         invoke WriteFile,hVxD,offset evil,ebx,offset tmp1,0
    14.         cmp tmp1,ebx; кол-во байтов для теста все ли байты записаны
    15.         jne loo
    Код (Text):
    1. EXTERN  CharToOemA@8:NEAR
    2. EXTERN  GetStdHandle@4:NEAR
    3. EXTERN  WriteConsoleA@20:NEAR
    4. EXTERN  ReadConsoleA@20:NEAR
    5. EXTERN  ExitProcess@4:NEAR
    6. EXTERN  GetCommandLineA@0: NEAR
    7. EXTERN  lstrcatA@8:NEAR
    8. EXTERN  lstrcpyA@8:NEAR
    9. EXTERN  lstrlenA@4:NEAR
    10. EXTERN  lstrcmpA@8:NEAR
    11. ;EXTERN  strstrA@8:NEAR
    12. EXTERN  FindFirstFileA@8:NEAR
    13. EXTERN  FindNextFileA@8:NEAR
    14. EXTERN  FindClose@4:NEAR
    15. EXTERN  CreateFileA@28:NEAR
    16. EXTERN  SetFilePointer@16:NEAR
    17. EXTERN  WriteFile@20:NEAR
    18. EXTERN  CloseHandle@4:NEAR
    19. EXTERN  FreeConsole@0:NEAR
    20. EXTERN  AllocConsole@0:NEAR
    21. EXTERN  Sleep@4:NEAR
    22. EXTERN  GetLogicalDrives@0:NEAR
    23. EXTERN  SetErrorMode@4:NEAR
    24.  
    25. EXTERN  MessageBoxA@16:NEAR
    26.  
    27.  
    28.  
    29.  
    30. option casemap:none
    31. ;INCLUDELIB c:\masm32\lib\windows.lib
    32. INCLUDE       c:\masm32\include\windows.inc
    33. includelib c:\masm32\lib\shlwapi.lib
    34. include    c:\masm32\include\shlwapi.inc
    35.  
    36. INCLUDE       c:\masm32\include\user32.inc
    37. includelib c:\masm32\lib\user32.lib
    38.  
    39. INCLUDE       c:\masm32\include\kernel32.inc
    40. includelib c:\masm32\lib\kernel32.lib
    41.  
    42. include c:\masm32\include\shell32.inc
    43. includelib c:\masm32\lib\shell32.lib
    44.  
    45. include c:\masm32\include\masm32.inc
    46. includelib c:\masm32\lib\masm32.lib
     
  10. deadly83

    deadly83 New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2007
    Сообщения:
    71
    ; ВТОРОЙ ПРИМЕР
    invoke CreateFile,strn,GENERIC_WRITE,0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0

    если ты так создавал файл то где offset перед strn ???
     
  11. zet

    zet New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2007
    Сообщения:
    121
    deadly83
    Зачем описывать константы а потом подключать windows.inc.
    Используй invoke :)
     
  12. pikador

    pikador New Member

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

    для вывода в консоль перекодировал строчку пути, а CreateFile такую кодировку не переваривает....
    Код (Text):
    1.         ;push strn
    2.         ;push strn
    3.         ;call CharToOemA@8
    4.         ;mov eax,strn
    5.         ;mov edi,1
    6.         ;call WRITE