لو توضح قليلا اخي بارك الله فيك
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;
}
اتمنى ات يكون واضح أعتذر لأنني متصل عن طريق الهاتف حاليا
و عليكم السلام و رحمة الله تعالى و بركاته
من الأفضل اعتماد المؤشرات 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;
}
محاكاة عمل اوامر الأسمبلي التي في الصورة فوق...
scriptkiddie
اعتقد من السيء استخدام هذه الاسماء في المتغيرات .. هذه اسماء رجسترات في البروسسر بينما يتم تخزينها في الرام الاسم في رايي يعطي مفهوم خاطئ للجدد..
عندك memory leak
free (eax)
======
ايضا هذه مخرجات الكود
https://onlinegdb.com/Hk-A5ILnE
(13-05-2019, 02:22 AM)hsn93 كتب : [ -> ]اعتقد من السيء استخدام هذه الاسماء في المتغيرات .. هذه اسماء رجسترات في البروسسر بينما يتم تخزينها في الرام الاسم في رايي يعطي مفهوم خاطئ للجدد..
بالعكس استعمال اسماء المتغيرات (اسماء السجلات) التي تعكس حقيقة ما يتم محاكاته (اوامر الأسمبلي الصورة فوق) يتيح فهم مراحل التنفيذ و السجلات التي يتم اعتمادها في المحاكاة...
(13-05-2019, 02:22 AM)hsn93 كتب : [ -> ]عندك memory leak
في حالة هذا المثال (فقط) تحرير الذاكرة المحجوزة غير اجباري لان التطبيق ينفذ الأوامر و بعدها يغلق (لا يقوم بتنفيذ اوامر اخرى اضافية)، و مع غلقه يقوم النظام بتحرير ما تم حجزه (داخل حيز العملية)
طبعا، هذا لا يمنع من اعتماد السلوك البرمجي الصحيح بتحرير ما يتم حجزه من ذاكرة...