تقييم الموضوع :
  • 4 أصوات - بمعدل 2.75
  • 1
  • 2
  • 3
  • 4
  • 5
مساعدة شباب في لغة السي ++
#1
السلام عليكم ورحمة الله 
اخوان انا بصدد كتابة برنامج صغير مع اني مبتدء في المجال (: 
المهم 

سؤالي هو مهو الكود لمستعمل الذي اذا استعملته ينقل بايت او بايتين الي متغير معا 
في بداي الحلقة وايل كايف انقل بايت او حرف الي متغير ما لاعمل عليه بعض العمليات المنطقية 
فمثلا هذا الكود من الأولي Olyy 

[صورة مرفقة: 692435830.png]

ارجو ان يكون استفساري واضح 
رَبِّ إِنِّي لِمَا أَنْزَلْتَ إِلَيَّ مِنْ خَيْرٍ فَقِيرٌ 
أعضاء أعجبوا بهذه المشاركة : mribraqdbra
#2
 
 
fonction  strncpy
 strncpy ( char * destination, const char * source, size_t num );
أعضاء أعجبوا بهذه المشاركة : mribraqdbra
#3
لو توضح قليلا اخي بارك الله فيك
رَبِّ إِنِّي لِمَا أَنْزَلْتَ إِلَيَّ مِنْ خَيْرٍ فَقِيرٌ 
أعضاء أعجبوا بهذه المشاركة : mribraqdbra
#4
Output:
str2: AT

/* strncpy example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[]= "AT4RE";
char str2[10];
strncpy ( str2, str1, 2 );
return 0;
}

اتمنى ات يكون واضح أعتذر لأنني متصل عن طريق الهاتف حاليا
أعضاء أعجبوا بهذه المشاركة : mribraqdbra
#5
و عليكم السلام و رحمة الله تعالى و بركاته
من الأفضل اعتماد المؤشرات pointers و التمرن عليها...
 
#include <windows.h>

int main() {
    char  *EAX = (char *)malloc(6);
    memset(EAX, 0, 6);
    strcpy(EAX, "AT4RE");

   int ECX = 0;

    do {
        EAX = ECX + EAX;
        *EAX = *EAX ^ 0x89ABCDE;
        *(byte *)EAX = *(byte *)EAX & 0xE;

        ECX = ECX + 0x4;
    } while(ECX < 8);

    return 0;
}

محاكاة عمل اوامر الأسمبلي التي في الصورة فوق...
أعضاء أعجبوا بهذه المشاركة : [email protected] , mribraqdbra
#6
scriptkiddie

اعتقد من السيء استخدام هذه الاسماء في المتغيرات .. هذه اسماء رجسترات في البروسسر بينما يتم تخزينها في الرام الاسم في رايي يعطي مفهوم خاطئ للجدد..

عندك memory leak

free (eax)

======

ايضا هذه مخرجات الكود
https://onlinegdb.com/Hk-A5ILnE
أعضاء أعجبوا بهذه المشاركة :
#7
هذا افضل اوضحت فيه ما يحدث في الكود المكتوب:

https://onlinegdb.com/S19QLvI3N
أعضاء أعجبوا بهذه المشاركة :
#8
(13-05-2019, 02:22 AM)hsn93 كتب : اعتقد من السيء استخدام هذه الاسماء في المتغيرات .. هذه اسماء رجسترات في البروسسر بينما يتم تخزينها في الرام الاسم في رايي يعطي مفهوم خاطئ للجدد..
بالعكس استعمال اسماء المتغيرات (اسماء السجلات) التي تعكس حقيقة ما يتم محاكاته (اوامر الأسمبلي الصورة فوق) يتيح فهم مراحل التنفيذ و السجلات التي يتم اعتمادها في المحاكاة...
 
(13-05-2019, 02:22 AM)hsn93 كتب : عندك memory leak

في حالة هذا المثال (فقط) تحرير الذاكرة المحجوزة غير اجباري لان التطبيق ينفذ الأوامر و بعدها يغلق (لا يقوم بتنفيذ اوامر اخرى اضافية)، و مع غلقه يقوم النظام بتحرير ما تم حجزه (داخل حيز العملية)

طبعا، هذا لا يمنع من اعتماد السلوك البرمجي الصحيح بتحرير ما يتم حجزه من ذاكرة...
أعضاء أعجبوا بهذه المشاركة :


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم