прочесть MBR

Тема в разделе "WASM.BEGINNERS", создана пользователем Clyde, 2 сен 2010.

  1. Clyde

    Clyde New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    154
    Код (Text):
    1. section '.data' code readable writeable  executable
    2. DEVICE_NAME DB "\\.\PhysicalDrive0",0
    3.  
    4. BUF db 512 dup (?)                                
    5.  
    6. proc  main
    7. locals
    8. SizeReadWrite2 dd ?
    9. endl
    10.  
    11. PUSH 0                                   ; hTemplateFile
    12. PUSH FILE_ATTRIBUTE_NORMAL            ; dwFlagsAndAttributes
    13. PUSH OPEN_EXISTING                    ; dwCreationDisposition
    14. PUSH 0                                    ; lpSecurityAttributes
    15. PUSH FILE_SHARE_READ + FILE_SHARE_WRITE                ; dwShareMode
    16. PUSH GENERIC_READ  ; dwDesiredAccess
    17. PUSH DEVICE_NAME                          
    18. CALL [CreateFile]                            
    19.  
    20. lea edx, [SizeReadWrite2]
    21. invoke ReadFile,eax,BUF,512,edx ,NULL
    22.  
    23. endp
    на ReadFile получаем error 0x57 invalid_parameter
    что тут не так?
     
  2. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    261
    Я вот так читал все нормально было
    Код (Text):
    1. push 0
    2. push dwread
    3. push 512
    4. push [pMemory]
    5. push [hfile]
    6. call [ReadFile]
    Попробуйте без lea - мб там с локальными проблема
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clyde
    А буфер выравнивать Санта Клаус будет? Хотя бы на четырёхбайтную границу.
    P.S. И хэндлы желательно закрывать вообще после использования.
     
  4. Clyde

    Clyde New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    154
    Treant
    не помогает
    если у вас есть пример рабочий, залейте плз
    l_inc
    спасибо, помогло
    правда просто на си переписал
    где подробно прочесть про выравнивание? поиск по форуму результаты даёт но размыто както.
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Вполне прекрасно работает. проверял на WinXP SP3 и Win7
    Код (Text):
    1. format PE GUI 5.0
    2. macro call n,[p]
    3. {
    4. common  if ~ p eq
    5. reverse push p
    6. common  end if
    7.     call n
    8. }
    9. section '' code readable executable
    10. entry $
    11.     call [CreateFileW], uFileName, 0xC0000000, 7, 0, 3, 0, 0
    12.     cmp eax, -1
    13.     jz @f
    14.      sub esp, 512
    15.      mov edx, esp
    16.      lea ecx, [esp-8]
    17.      call [ReadFile], eax, edx, 512, ecx, 0, 0, eax
    18.      pop edx
    19.      call [CloseHandle]
    20.      add esp, 512
    21. @@:
    22.     call [ExitProcess], 0
    23. uFileName       du '\\.\PhysicalDrive0',0
    24. ...
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Clyde
    В каком смысле "подробно прочесть"? Тут особо читать нечего: адреса структур, переменных или буферов в апи иногда нужно передавать выравненными. Иногда может возвращаться invalid parameter, иногда вообще access denied. Просто об этом надо помнить.