رفتن به مطلب
انجمن تیم امنیتی گارد ایران

ارسال های توصیه شده

به نام خدای بزرگ

با سلام

 

2.PNG.9c8af5bad9dba9e79b15a1753fdc6811.PNG

 

خیلی وقت بود که قصد داشتم یک تاپیک جامع ایجاد کنم.

البته بین C و python دو دل بودم که در نهایت تصمیم گرفتم که C رو آموزش بدم.

در این تاپیک با پایه های این زبان به خوبی آشنا میشید و گام محکمی برای مفاهیم پیچیده تر این زبان بر می دارید.

مخاطب این تاپیک همگان هستن به خصوص افرادی که قصد دارن برنامه نویسی رو شروع کنن چه خوب هست که مفاهیم رو از دریچه ی C نگاه کنن.

به هر حال یادگیری این زبان به ویژه در مباحث مربوط به هک یک اصل محسوب میشه.

 

این هم لیست عناوین :

آشنایی با ساختار کلی زبان C

آشنایی با متغیرها و ثوابت

ورودی و خروجی استاندارد

آشنایی با عملگرها

دستور شرطی switch و if

حلقه ی تکرار for و while

توابع

آرایه ها

اشاره گرها

کار با رشته ها

ساختارها

 

فکر می کنم که یکی از تاپیک های خوب در این زمینه باشه و دارای نکات فنی خوبی هم باشه.

این تاپیک به مرور زمان کامل میشه.

فعلا یا علی

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

زبان C در اوایل دهه ی 1970 توسط Thompson و Ritchie ابداع شد.

این زبان ارتباط بسیار نزدیکی با سیستم عامل یونیکس داره چون هر دو به صورت همزمان در طول زمان تکامل پیدا کردند.

زبان C یک زبان میانی هست یعنی هم به زبان محاوره ای ما و هم به زبان ماشین نزدیک هست و برای اجرا احتیاج به کامپایل داره.

(فرایند ترجمه ی کد به زبان ماشین رو کامپایل میگن)

من در این آموزش از سیستم عامل کالی لینوکس و ویرایشگر متن nano استفاده می کنم و برای کامپایل برنامه ها هم از gcc که به صورت پیش فرض نصب هست.

 

{ساختار کلی زبان C}

به این برنامه ی ساده دقت کنید.

 

Capture1.PNG.b224bc59f12d84e3e0c92372ab8dc020.PNG

 

این ساده ترین برنامه به زبان C هست که فقط عبارت in the name of God رو برای ما چاپ می کنه.

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

()main تابع اصلی ما هست و نقطه ی ورود ما به برنامه محسوب میشه.

تابع ()printf برای چاپ پیام هست.

و n\ یک کاراکتر کنترلی هست که رفتار عادی یک دستور رو تغییر میده و در اینجا به معنی خط جدید هست.

;0 return همون نتیجه ی ما هست که از جنس عدد صحیح هست به خاطر جنس خود تابع int main

و 0 به معنای موفقیت هست.

تمام دستورات C به ; ختم میشن

خوب برنامه رو کامپایل و اجرا می کنیم.

 

Capture2.PNG.fc3bf6b20f275569eafce36e421a2295.PNG

 

برای کامنت های تک خطی هم از // استفاده می کنیم که برای نمایش توضیحات در کد به کار میره و می تونه خیلی مفید باشه.

 

Capture3.PNG.0ad059facde660c378e06f9046d04199.PNG

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

{آشنایی با متغیر ها و ثوابت}

متغیر در واقع بخشی از حافظه هست که ما مقداری رو در داخل اون قرار میدیم.

و این مقدار می تونه دستخوش تغییر بشه در طول اجرای برنامه

برای مثال دریافت نام یک کاربر و یا ضرب دو عدد همه ی این مقادیر باید در داخل متغیرها قرار بگیرن.

در زبان C یک متغیر با نوع و نام و مقدار در رابطه هست و از این نظر بسیار سخت گیر هست.

برای تعریف یک متغیر در زبان C به این شکل عمل می کنیم.

 

variable.PNG.2fc4a72d3375d41bc6b2cf8439fe6eb0.PNG

 

که متغیر age از نوع عدد صحیح با مقدار 25 هست انواع دیگر از متغیرها نیز وجود داره 

مثل float برای اعداد اعشاری و یا char برای نوع کاراکتری

برای نامگذاری متغیرها از حروف بزرگ و کوچک استفاده می کنیم و همین طور اعداد ولی به شرطی که عدد در ابتدای نام نباشه.

 

ثابت : قوانین نامگذاری ثابت هم مثل متغیر هاست با این تفاوت که نمیشه مقدار اون رو تغییر دادو این هم باعث افزایش کارایی و هم امنیت میشه.

برای تعریف یک ثابت از کلمه ی کلیدی const استفاده می کنیم البته روش های دیگه ای هم وجود داره.

 

const.PNG.dde666a6bf498e827cd61cd3919d9812.PNG

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

{ورودی و خروجی استاندارد}

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

که معمولا ورودی مربوط میشه به صفحه کلید و خروجی به مانیتور (کاری به خطای استاندارد ندارم)

ساده ترین دستور برای خروجی و چاپ پیام دستور printf هست که یک عبارتی رو برای ما چاپ می کنه.مثل برنامه ی اولی که نوشتیم.

ما با متغیر ها آشنا شدیم و برای چاپ مقدار اون ها می تونیم از این دستور یا بهتر بگم تابع استفاده کنیم.

ولی باید از پارامتر فرمت که نشون دهنده ی نوع متغیر و همین طور نام متغیر در انتها استفاده کنیم که متناظر هم باشن.

معروف ترین پارامترهای فرمت در زبان C

d% برای اعداد صحیح

f% برای اعداد با ممیز شناور

c% برای کاراکترها 

s% برای رشته ها

این هم یک مثال ساده :

 

output1.PNG.c4111f81fade4abd9610faa2359a20e0.PNG

 

output2.PNG.38583de7329ea86f31b2c196d92499fa.PNG

 

ولی این یک برنامه ی یک طرفه هست و تعاملی با کاربر نداره و برای این کار باید از ورودی استاندارد استفاده کنیم.

منظورم تابع معروف scanf هست این طوری می تونیم یک رابط کاربری ایجاد کنیم.

این تابع اشاره به آدرس متغیر در حافظه داره این نکته رو یاد داشته باشید که موقع نوشتن یک متغیر باید به آدرس اون اشاره کنیم.

البته با اشاره گرها اشتباه نشه 

و همین طور نوع متغیر این که از چه جنسی هست.

یه مثال دیگه :

 

input1.PNG.21f3fe7350cbf36718737970d8bc2b75.PNG

 

input2.PNG.20fe329e89ae2e53a4e8132b50f26da5.PNG

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

{آشنایی با عملگرها}

ما با استفاده از عملگرها و یا اپراتورها می تونیم اعمالی رو بر روی داده ها انجام بدیم.

و چندین نوع عملگر مختلف در C وجود داره که مهم هاش رو توضیح میدم.

عملگرهای محاسباتی که برای انجام اعمال محاسباتی مثل ضرب و تقسیم و ... به کار میرن.

 

oprator1.PNG.db6f077d0b46eab0d1a97dca74c43961.PNG

 

عملگرهای مقایسه ای که برای مقایسه ی مقادیر مثل کوچکتر و بزرگتر مساوی و عدم تساوی و ... کاربرد دارن.

 

oprator2.PNG.4b1357a96cbcc9820400146d222180a2.PNG

 

و همین طور عملگر های منطقی.

 

oprator3.PNG.ba3627e1f8c7ed34e88761923d91d9b4.PNG

 

فعلا کاری با این ها نداریم همین که سطحی هم بشناسید اون ها رو کافی هست.

 

عملگر مهم sizeof 

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

برای مثال من می خوام بدونم که طول متغیر از نوع int که تعریف کردم چقدر هست.

دقت کنید.

 

sizeof1.PNG.d825f54cbb9be1d57a6c7248717b52c5.PNG

 

sizeof2.PNG.323cffeb49878de0a7d38c0100fa2ded.PNG

 

بله معمولا عددصحیح 4 بایت هست.

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

{دستور شرطی switch و if}

ساده ترین دستور شرطی if هست که با استفاده از اون ما می تونیم جهت جریان یک برنامه رو کنترل کنیم.

فرض کنید که ما درون یک چهارراه قرار داریم و این که باید کدوم مسیر رو انتخاب کنیم. دستور if هم به این شکل هست.

دستور if همیشه دارای یک شرط هست که در داخل پرانتز قرار می گیره این شرط می تونه مثبت و یا منفی باشه.

اگه شرط ما درست باشه دستوراتی برای ما اجرا میشن.

برای مثال من یک متغیر ست کردم و یک شرط ساده تعیین می کنم و اگه شرط من درست بود عبارتی برای من چاپ بشه.

 

if1.PNG.ba10b8a9365c5f819c6f5fc0ffcebd86.PNG

 

if2.PNG.849b255c2ec327669638f54984846b7d.PNG

 

من می تونم چند شرط چند خطی با else if و همین طور یک else تنها در انتها برای عدم صحت شرط خودم تعیین کنم.

 

if3.PNG.ed42e26bb12d1f9bca5658423576c73a.PNG

 

if4.PNG.0998e1a6882f159fe71fd80f35c96a4b.PNG

 

دستور switch

اگه تعداد زیادی دستور else و if داشته باشم بهتر هست که از switch استفاده کنم.

این طوری می تونم به طور متمرکز بر روی یک متغیر کار کنم و خوانایی برنامه هم افزایش پیدا می کنه.

درون دستور switch ما کیس های مختلفی (شرط) های گوناگونی داریم.

البته در پایان هر کیس باید از کلمه ی کلیدی break استفاده کنیم تا کیس های بعدی اجرا نشن.

بهتر هست یک کیس default هم در نظر بگیریم تا یک شرط پیش فرض هم داشته باشیم.

این هم یک مثال ساده.

 

switch1.PNG.eb9384ff1adb41bda257039106089e09.PNG

 

switch2.PNG.883712b9cc83aa4d431985a6020f35e9.PNG

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

{حلقه ی تکرار for و while}

یکی از اصلی ترین مفاهیم در برنامه نویسی تکرارها هستند.

و ما در زبان C با دستورات for و while سر و کار داریم که همانند دستور if دارای یک شرط هستند.

و اینجا اگه شرط ما درست بود یکسری کار ها برای ما تکرار میشن.

معمولا زمانی از حلقه ی while استفاده می کنیم که شرط ما مشخص نیست که کی به پایان میرسه.

و یک کانتر برای کنترل حلقه و یا آپدیت اون به کار می بریم که می تونه هم کاهشی باشه و هم افزایشی.

این هم یه مثال ساده :

 

while1.PNG.37ed46d5919bfae4f00825f3f46c46b6.PNG

 

while2.PNG.be24c104eff437e4a155f979fab4eec1.PNG

 

حلقه ی for 

زمانی که ما از شرط خاتمه آگاه هستیم می تونیم از حلقه ی for استفاده کنیم.

هر چند که این دو حلقه همدیگر رو به خوبی پوشش میدن.

ولی فرق حلقه ی for این هست که مقدار دهی اولیه و شرط و همین طور آپدیت همگی در یکجا قرار دارن.

و این کنترل روی مقادیر رو افزایش میده و دستورات داخل پرانتز رو با ; از هم جدا می کنیم.

 

for1.PNG.209c66c436fdc9605bfaf6a2e259499d.PNG

 

for2.PNG.0091c09903ca2efa26ef9dbf70d26165.PNG

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

{توابع}

یکی از بلوک های اصلی برنامه نویسی توابع هستن و بدون اون ها واقعا برخی از برنامه ها دچار مشکل میشن.

مثلا اگه قرار بود تابعی مثل scanf رو دستی بنویسیم واقعا چقدر دچار مشکل میشدیم و توابع کار رو برای ما آسون کردن.

توابع برنامه ها رو ساده تر و خواناتر و قابلیت انعطاف به اون ها بخشیدن.

یک تابع حاوی بدنه هست که در واقع یکسری دستورات هست.

یک تابع می تونه یک یا چند آرگومان داشته باشه و برای اشاره به یک تابع به نام اون اشاره می کنیم.

برای مثال من می خوام یک تابع بنویسم که یک عدد رو دو برابر کنه و در خروجی به من نشون بده.

اسم تابع من multi هست.

دقت کنید.

 

func1.PNG.5b1f8d5e5cf3d71e29157cf55bda4787.PNG

 

func2.PNG.e58a04925b2d8ede52cda489906c5f23.PNG

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
 اشتراک گذاری

انجمن تیم امنیتی گارد ایران

تیم امنیتی گارد ایران یک گروه مستقل است که قوانین آن با خط مشی جمهوری اسلامی ایران مغایرت ندارد. تیم امنیتی گارد ایران از سال 1393 فعالیت خود را آغاز کرد و هدف این تیم تامین امنیت سایت ها و سرورهای ایرانی است. تیم ما همیشه برای دفاع از مرزهای سایبری سرزمین عزیزمان ایران آماده است.

شبکه های اجتماعی

×
×
  • اضافه کردن...