Код (Text): section '.data' code readable writeable executable DEVICE_NAME DB "\\.\PhysicalDrive0",0 BUF db 512 dup (?) proc main locals SizeReadWrite2 dd ? endl PUSH 0 ; hTemplateFile PUSH FILE_ATTRIBUTE_NORMAL ; dwFlagsAndAttributes PUSH OPEN_EXISTING ; dwCreationDisposition PUSH 0 ; lpSecurityAttributes PUSH FILE_SHARE_READ + FILE_SHARE_WRITE ; dwShareMode PUSH GENERIC_READ ; dwDesiredAccess PUSH DEVICE_NAME CALL [CreateFile] lea edx, [SizeReadWrite2] invoke ReadFile,eax,BUF,512,edx ,NULL endp на ReadFile получаем error 0x57 invalid_parameter что тут не так?
Я вот так читал все нормально было Код (Text): push 0 push dwread push 512 push [pMemory] push [hfile] call [ReadFile] Попробуйте без lea - мб там с локальными проблема
Clyde А буфер выравнивать Санта Клаус будет? Хотя бы на четырёхбайтную границу. P.S. И хэндлы желательно закрывать вообще после использования.
Treant не помогает если у вас есть пример рабочий, залейте плз l_inc спасибо, помогло правда просто на си переписал где подробно прочесть про выравнивание? поиск по форуму результаты даёт но размыто както.
Вполне прекрасно работает. проверял на WinXP SP3 и Win7 Код (Text): format PE GUI 5.0 macro call n,[p] { common if ~ p eq reverse push p common end if call n } section '' code readable executable entry $ call [CreateFileW], uFileName, 0xC0000000, 7, 0, 3, 0, 0 cmp eax, -1 jz @f sub esp, 512 mov edx, esp lea ecx, [esp-8] call [ReadFile], eax, edx, 512, ecx, 0, 0, eax pop edx call [CloseHandle] add esp, 512 @@: call [ExitProcess], 0 uFileName du '\\.\PhysicalDrive0',0 ...
Clyde В каком смысле "подробно прочесть"? Тут особо читать нечего: адреса структур, переменных или буферов в апи иногда нужно передавать выравненными. Иногда может возвращаться invalid parameter, иногда вообще access denied. Просто об этом надо помнить.