PDA

View Full Version : سوال: حقیقت پیش پردازنده ها و فایل های سرآیند



makhdoosh
پنج شنبه 07 مرداد 1389, 16:25 عصر
خوندم، که دستورات پیش پردازنده ایی وجود دارد در C که مترجمی هست که با مشاهده دستوراتی که با # شروع میشه اجرا میشود و آنها را به دستورات زبان C تبدیل می کند.

و همچنین تابع هایی که در C استفاده میشوند در فایل هایی به نام سرآیند هستند که باید توسط پیش پردازنده به برنامه اضافه شوند.
مثلا تابع Printf که در فایل سرآیند stdio.h قرار دارد.
حالا سوال بنده اینجاست؛ آیا پیش پردازنده یا بهتره بگم فایل سرآیند که مثلا محتوی تابع Printf هست خود به زبان C هست یا نه در پشت پرده یه سری عملیات سیستمی انجام میشه.
در واقع آیا تابع Printf معادل دستورات مستقیم C داره؟
مثلا آیا کار پیش پردازنده اینه که بعدا تابع ها رو در سورس برنامه تعریف کنه (همونطور که خود ما میتونیم یک تابع رو خارج از تابع ()main تعریف کنیم)
یعنی آیا سر آخر تابع printf در سورس برنامه نوشته شده اضافه میشه در کنار توابع دیگه ایی که خودمون تعریف کردیم؟

یا سوالم رو کلی تر بپرسم؛ آیا بنده میتونم بی نیاز از توابع موجود در سرآیندها خودم اقدام به نوشتن و تعریف آن توابع با دستورات (غیر تابعی) C کنم.
مثلا خودم دستور printf رو در قالب یک تابع جدا در کد برنامه بنویسم و تعریف کنم؟

اگر بله، چه دستوراتی (غیر از توابع) در C هست که میتونه با خروجی صفحه نمایش ارتباط بر قرار کنه؟
حدس خودم: نوشتن مستقیم متغییر ها در حافظه نمایشی؟

همچنین اگه جواب مثبت هست، لطفا میشه سورس دستور Printf رو اینجا قرار بدید؟

khafan_bat
پنج شنبه 07 مرداد 1389, 17:35 عصر
http://www.cplusplus.com/reference/clibrary (http://www.cplusplus.com/reference/clibrary/)

makhdoosh
جمعه 08 مرداد 1389, 21:49 عصر
http://www.cplusplus.com/reference/clibrary (http://www.cplusplus.com/reference/clibrary/)



بی زحمت یه توضیحی هم در مورد لینک بدید.

r00tkit
جمعه 08 مرداد 1389, 23:43 عصر
سلام

دوست من کمی بیشتر در این مورد فکر کن


همونظور که گفتم باید از توابع سیستم عامل استفده کنید یا از Inline Assembly استفاده کنید.


ایا منظور از توابع سیستمی api هستش در هر صورت چه c Runtime library (http://en.wikipedia.org/wiki/Runtime_library) یا توایع ای مثل WriteConsole باشه بازم از system call استفاد می کنه

توی header فقط declaration توابع هستش و Implementation توابع داخل msvcrxxx.dll هستش (برای ران تایم لایبرری )

و برای اینکه از صفر یه تابع برای چاپ روی مانیتور بنویسید باید توی ring0 کد بزنید ( استفاده از توابع سیستمی و inline assembly هم ربط به این سوال نداره )

r00tkit
شنبه 09 مرداد 1389, 11:53 صبح
اشتباه متوجه شدید.
چون که سوال این بود :

آیا دستوری در C هست که با صفحه نمایش ارتباط برقرار کنه (غیر از توابع) ؟ نه نیست. ولی با اسمبلی میشیه.

لطفا بیشتر دقت کنید.

دوست من چه با توابع C چه با api ویندوز تو (یعنی این توابع) از system call استفاده می کنن

و تو نمی تونی با اسمیلی این کار(یعنی از صفر یه تابع بنویسی که با مانیتور در ارتباط باشه ) رو بکنی چون تو محیط protected mode وقتی تو رینگ 3 هستی نمی تونی به سخت افزار دست رسی داشته باشی و نمی تونی از (http://en.wikipedia.org/wiki/Protected_mode)Interrupt استفاده کنی حالا اگه قبول نداری خوب برنامه شو بنویس

r00tkit
شنبه 09 مرداد 1389, 15:50 عصر
اصلا: می دونی چیه



آیا دستوری در C هست که با صفحه نمایش ارتباط برقرار کنه (غیر از توابع) ؟ نه نیست. ولی با اسمبلی میشیه.


keyword . تابع . اسمبلی



خود زبان سی Keywork خواصی برای ارتباط با سخت افزار نداره (با توابع کاری ندارم)


اخه من نمی فهمم بین keyword و توابع چه ربطی هست که داری مقایسه می کنی

یه بار دیگه این ها رو مرور کن


http://en.wikipedia.org/wiki/Keyword_(computer_programming)

http://en.wikipedia.org/wiki/Function_(computer_science)

http://en.wikipedia.org/wiki/Opcode برای اسمبلی که بهش گیر دادی و هی داری با تابع و کیورد مقایسه می کنی




اصلا فرض کن شما تو ring0 دازی کد میزنی ، بدون هیچی ، اون وقت با C میخوای چی کار کنی ؟


native api


پی نوشت:
اصلا" سوال طرف چی بود چی شد، بی خیال

protelworker
یک شنبه 18 مهر 1400, 15:01 عصر
سلام دوست عزیز لطفا عبارت versions of "hello, world" in x86/x86-64 assembly language (and C)سرچ کنید

https://montcs.bloomu.edu/~bobmon/Code/Asm.and.C/hello-asms.html