کانال بایت امن
4.52K subscribers
415 photos
49 videos
34 files
586 links
برگزاری دوره های آموزش برنامه نویسی و امنیت نرم افزار.

https://dword.ir
@YMahmoudnia
Download Telegram
کانال بایت امن
در زبان برنامه نویسی C حداقل به چند روش می توان عملیات انتساب رشته ها را انجام داد.
#چالش

جواب صحیح گزینه آخر یعنی : حداقل به 7 روش امکان انتساب وجود دارد.
برای درک بیشتر تکه کد زیر را بررسی کنید.


char chrSign[] = "DWORD.IR";


// 01. Array Index Assign
char array01[] = "DEFUALT_RAW_DATA";
SecureZeroMemory(array01, sizeof(array01));
array01[0] = 'D';
array01[1] = 'W';
array01[2] = 'O';
array01[3] = 'R';
array01[4] = 'D';
array01[5] = '.';
array01[6] = 'I';
array01[7] = 'R';

// 02. Pointer Assign
char* array02 = "DWORD.IR";
array02 = "SecureByte.IR";

// 03. Assign With STR Functions
SecureZeroMemory(array01,sizeof(array01));
strcpy_s(array01, sizeof(array01), chrSign);

// 04. Assign With MEM Functions
SecureZeroMemory(array01, sizeof(array01));
memcpy_s(array01, sizeof(array01), chrSign, strlen(chrSign) + 1);

// 05. Assign With LSTR Functions
SecureZeroMemory(array01, sizeof(array01));
lstrcpyA(array01, chrSign);

// 06. Assign With SPRINTF
SecureZeroMemory(array01, sizeof(array01));
sprintf_s(array01, sizeof(array01), "%s", chrSign);

// 07. Assign With Inputs
SecureZeroMemory(array01, sizeof(array01));
scanf_s("%17s", array01, (unsigned)_countof(array01));

// 08. Assign With External Inputs
// Registry, Files and etc...


🦅 کانال بایت امن | گروه بایت امن
_
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍12🔥4😁4👎2😢2
کانال بایت امن
آیا پارامتر (Parameter) و آرگومنت (َArgument) در فانکشن ها دارای مفهوم یکسانی هستند ؟
#چالش

جواب صحیح : گزینه اول یعنی "خیر"
مفهوم پارامتر و آرگومنت در فانکشن ها با هم تفاوت دارند.

پارامتر ها، متغیرهایی هستند که توسط یک تابع تعریف می شوند که هنگام فراخوانی تابع مقادیری را دریافت می کنند. در حقیقت پارامتر یک نگه دارنده برای مقادیر واقعی که به تابع منتقل می شوند عمل می کنند.

آرگومنت ها، مقادیر واقعی هستند که در هنگام فراخوانی تابع به آن ارسال می شوند.

#include <stdio.h>

// 'message' is not a real variable and it is a parameter
void SampleFunction(const char* message)
{
printf_s("Message: %s\n", message);
}

int main()
{
char message[] = "Hello DWORD!";

// 'message' is a real variable and it is an argument
SampleFunction(message);

int c = getchar();
return 0;
}


مشابه این موضوع، مفاهیم Declaration و Definition هستند که بعضا باهم اشتباه گرفته می شوند.

🦅 کانال بایت امن | گروه بایت امن
_
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥8👎4👍1🤩1
کانال بایت امن
در زبان برنامه‌ نویسی C، اعلان ضمنی تابع (Implicit Function Declaration) در چه حالتی به وجود می‌آید؟
#چالش

جواب درست همان گزینه ای است که کمتر رای گرفته یعنی INT حالا بریم سراغ توضیحات.

بین گزینه 2 و 4 باید انتخاب می کردید که هر دو گزینه درست هستند اما حالت VOID در همه کامپایلر ها یکسان نیست و رفتار متفاوتی خواهد داشت.

نکته سئوال : در بعضی از کامپایلر ها مقدار VOID نیز به صورت Implicit Function Declaration خواهد بود اما در واقع INT در نظر گرفته می شود و در بعضی کامپایلر ها با خطا روبرو خواهید شد و باید حتما Prototype فانکشن را تعریف کنید.

در کد زیر :
مفهوم Implicit Function Declaration زمانی به وجود می آید که شما Prototype فانکشن با مقدار بازگشتی INT را برای کامپایلر مشخص نکرده باشید. در این حالت کامپایلر خطایی ندارد اما به شما هشدار خواهد داد.

تفاوت کد زیر را می توانید در Visual Studio Code و Microsoft Visual Studio بررسی کنید. اگر مقدار بازگشتی SampleFunction را VOID در نظر بگیرید در Microsoft Visual Studio با خطا روبرو خواهید شد.

#include <stdio.h>

int main()
{
sampleFunction();
return 0;
}

int sampleFunction()
{
printf("Hello from sampleFunction\n");
return 0;
}


🦅 کانال بایت امن | گروه بایت امن
_
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥7👍6🤩2👎1
کانال بایت امن
در زبان برنامه‌ نویسی C، کدام یک از عبارت‌های زیر مثالی از شرط یودا (Yoda Condition) است؟
#چالش

جواب صحیح : گزینه سوم

در زبان برنامه نویسی C، عبارت === یا strict equality وجود ندارد. بنابراین گزینه های 2 و 4 حذف خواهند شد. اما در مورد == یا loose equality بین گزینه های 1 و 3، گزینه 3 صحیح است.

مفهوم Yoda Condition (شرط یودا) در برنامه‌نویسی به نوعی از نگارش شرط‌ها اشاره دارد که در آن ثابت‌ها و مقادیر ثابت به جای قرار گرفتن در سمت راست عبارت شرطی، در سمت چپ قرار می‌گیرند.

این شیوه نگارش از شخصیت یودا در مجموعه فیلم‌های "جنگ ستارگان" (Star Wars) الهام گرفته شده است که سبک خاصی در صحبت کردن دارد.

if ((file = fopen("example.txt", "w")) == NULL) 
{
perror("Error opening file");
return 1;
}


if (NULL == (file = fopen("example.txt", "w")))
{
perror("Error opening file");
return 1;
}


در مثال دوم که یک Yoda Condition است در شرط if مقدار ثابت NULL در سمت چپ قرار گرفته است.

🦅 کانال بایت امن | گروه بایت امن
_
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍7🔥7🤩2😁1