Спасибо. Еще один в догонку. Вы круто генерите внедряемый код, с помощью записи. Наверное что-то читали по соответствующих машынных кодах. Можете мне какието-то линки дать. А то по Ctrl+Alt+C - не очинь получаеться. Я интерисують генерацией динамического вызова функций с DLL, когда список параметров, типы, соглашение о вызове узнаются только во время исполнения.
Ms Rem, kosyak tut PDOB_NAME_STRING(out_buffer)^.name := astring;, esli ne slojno to skaji kak ti ponimaesh eto virojenee?
wish3 Машинный код получить не сложно, для этого можно хотя-бы OllyDbg заюзать, или хиев. А динамический вызов длл описан в многих источниках достаточно хорошо и я думаю в комментариях не нуждается. LuckyDevil PDOB_NAME_STRING(out_buffer)^.name := astring Я это представляю так: поле name структуры DOB_NAME_STRING приравнивается к astring. Но как это будет представлять дельфи еще неизвестно, может лучше будет скопировать структуру ANSI_STRING с помощью RtlCopyMemory. Выглядеть это будет так: Код (Text): RtlCopyMemory(@DOB_NAME_STRING(out_buffer^).name, @astring, SizeOf(ANSI_STRING));
Ms Rem, tvio variant nado budet proverit', ya toje dumal o copirovanii. potomu kak viyasnilos' chto PDOB_NAME_STRING(out_buffer)^.name := astring ravnosil'no vot etomu out_buffer := @astring; <font color="red]Но как это будет представлять дельфи еще неизвестно, может лучше будет скопировать структуру ANSI_STRING </font><!--color--> poprobuyu
RtlCopyMemory какой аналог данной функции есть в ядре(NToskrnl)? Что-то я ее не нашел в lib-х. Наверное вот эта _memcpy?
Код (Text): #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length)) Если не нашел в либах, то поищи в хедерах ддк.
не получается вот это RtlCopyMemory(@DOB_NAME_STRING(out_buffer^).name, @astring, SizeOf(ANSI_STRING)); почему-то результат тот же(out_buffer := @astring, что-то тут вовсе ничего не понимаю
Ms Rem, быть может это выглядить жутко не праильно но я делаю так: memcpy(Pchar(LongInt(out_buffer)+12),@astring,astring.Length); но результат остается не изменным, мне не удается скопировать данные в требуемый адрес(смещение)
Ms Rem, припух и устал я что-то )) слушай а как это вырожение можно представить в дельфи: pDeviceObject->Flags &= (~DO_DEVICE_INITIALIZING); так: pDeviceObject^.Flags := pDeviceObject^.Flags and (DO_DEVICE_INITIALIZING xor DO_DEVICE_INITIALIZING);???????
У меня проблема с отктытием секции(ZwOpenSection) вот код ... .data hSection dd ? ObString UNICODE_STRING <> ustr dw '\','D','e','v','i','c','e','\','P','h','y','s',\ 'i','c','a','l','M','e','m','o','r','y',0 ... .code start: invoke RtlInitUnicodeString,offset ObString,offset ustr lea ecx,oa InitializeObjectAttributes ecx,offset ObString,OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE,NULL,NULL invoke ZwOpenSection,offset hSection,READ_CONTROL or WRITE_DAC,offset oa .... После этого в eax возвращается ошибка STATUS_DATATYPE_MISALIGNMENT, не могу понять где я напортачил,может кто подскажет. Заранее thx. MsRem статьи что надо.
Ms Rem Не знаешь почему открытие секции(ZwOpenSection) в win2003sp1 возвращает STATUS_ACCESS_DENIED,хотя в xpsp2 всё OK. phide: PH_ERR_OPEN_SECTION
electron Незнаю, к сожалению нет под рукой Win2003 чтобы проверить. Возможно мешают установленные антивирусы.
Всем доброго! Ms Rem, как всегда я с вопросом к тебе, как помнишь я тут парюсь с дельфи, вообщем не все моменты мне известны и я их пропускал без внимания, но рано или поздно все равно с этим столкнешься... вот часть структуры _IO_STACK_LOCATION: Код (Text): typedef struct _IO_STACK_LOCATION { UCHAR MajorFunction; UCHAR MinorFunction; UCHAR Flags; UCHAR Control; union { // // Parameters for IRP_MJ_CREATE // struct { PIO_SECURITY_CONTEXT SecurityContext; ULONG Options; USHORT POINTER_ALIGNMENT FileAttributes; USHORT ShareAccess; ULONG POINTER_ALIGNMENT EaLength; } Create; // // Parameters for IRP_MJ_READ // struct { ULONG Length; ULONG POINTER_ALIGNMENT Key; LARGE_INTEGER ByteOffset; } Read; // // Parameters for IRP_MJ_WRITE // struct { ULONG Length; ULONG POINTER_ALIGNMENT Key; LARGE_INTEGER ByteOffset; } Write; ... изначально я игнорировал вот это определение в типах POINTER_ALIGNMENT, но сейчас у меня кажется из-за этого возникла проблема. Насколько я понимаю это выравнивание по границам байтам? Я в этом нифига не смыслю, можно ли что-то сделать с этим в дельфи?
LuckyDevil Вот объявление: Код (Text): #if defined(_WIN64) #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8) #else #define POINTER_ALIGNMENT #endif Т.е. это означает выравнивание по границе 8 под Win64, под Win32 ничего не происходит.
IceStudent, т.е. если я использую 32 разрядную платформу, то это определение не используется. IceStudent,thx.