
بدائيات قراءة وكتابة بديلة باستخدام دوال Rtl* بالطريقة غير المقصودة.
مستودع يحتوي على نصوص برمجية لتوضيح بدائيات قراءة وكتابة بديلة باستخدام دوال Rtl* بالطريقة غير المقصودة.
RtlFillMemory تأخذ ثلاثة وسائط: مؤشرًا إلى الذاكرة الوجهة، وعدد البايتات المراد كتابتها، وقيمة بايت واحدة. وهي تكتب بايتًا واحدًا فقط في كتلة الذاكرة المحددة.
بدائية كتابة باستخدام مزيج من RtlInitializeBitMapEx وRtlFillMemory.
أولًا، تمرر على السلسلة في أجزاء بحجم 16 بايت، وتقسم كل كتلة إلى قيمتين بحجم 8 بايت. تُخزَّن الكتلة الأولى (8 بايت) في الوسيط الأول للدالة RtlInitializeBitMapEx وتُخزَّن الكتلة الثانية (8 بايت) في الوسيط الثاني.
ثم، إذا بقيت كتلة إضافية بحجم 8 بايت، يكتبها باستخدام RtlInitializeBitMapEx مع وسيط ثانٍ NULL.
أخيرًا، إذا بقي أقل من 8 بايت، يكتبها بايتًا بايت باستخدام RtlFillMemory حتى تُنسخ السلسلة كاملة إلى المخزن المؤقت الوجهة.
بدائية قراءة باستخدام RtlQueryDepthSList. مفيدة للبحث عن ROP Gadget، ومقارنة البايتات، وكشف الخطافات، وما إلى ذلك. هنا أشرح كيفية حقن عملية بسيطة باستخدام ROP Gadget. تقبل RtlQueryDepthSList وسيطًا واحدًا—عنوان الذاكرة المراد القراءة منه—ولكنها تقرأ بايتين فقط وتُرجع قيمة من 4 بايت.