View Full Version : سیستم چگونه تشخیص میدهد با محتوای خانه ی رم بعنوان عدد علامت دار برخورد کند یا بدون علامت؟
moha//\\//\\ad
شنبه 01 شهریور 1393, 11:22 صبح
سلام دوستان
سوالی که برام پیش اومده اینه که میگن بیت اخری برا علامته
باشه قبول
ما دو عدد تعریف میکنیم که این دو عدد داخل رم قرار میگیرن حالا سیستم چجوری متوجه میشه که وقتی میخواد اطلاعات خانه ی 0x10ff رو بخونه باید بعنوان یک عدد بدون علامت بهش نگاه کنه و وقتی میخواد 0x20ff رو بخونه باید بعنوان یک عدد علامت داره بهش نگاه کنه ؟؟؟
ciavosh
شنبه 01 شهریور 1393, 12:02 عصر
سلام دوستان
سوالی که برام پیش اومده اینه که میگن بیت اخری برا علامته
باشه قبول
ما دو عدد تعریف میکنیم که این دو عدد داخل رم قرار میگیرن حالا سیستم چجوری متوجه میشه که وقتی میخواد اطلاعات خانه ی 0x10ff رو بخونه باید بعنوان یک عدد بدون علامت بهش نگاه کنه و وقتی میخواد 0x20ff رو بخونه باید بعنوان یک عدد علامت داره بهش نگاه کنه ؟؟؟
نکته دقیقاً این است که سیستم به هیچ عنوان نمیدونه نوع و مفهوم بیتهای ذخیره شده در حافظه چیه. "ماشین کدی" که توسط کامپایلر ایجاد می شود به آن قسمت از حافظه به عنوان عدد صحیح فرضاً علامت دار برخورد می کند. در واقع این نرم افزار است که تصمیم می گیرد یک داده را چگونه تفسیر کند.
motherboard
شنبه 01 شهریور 1393, 12:52 عصر
سلام دوستان
سوالی که برام پیش اومده اینه که میگن بیت اخری برا علامته
باشه قبول
ما دو عدد تعریف میکنیم که این دو عدد داخل رم قرار میگیرن حالا سیستم چجوری متوجه میشه که وقتی میخواد اطلاعات خانه ی 0x10ff رو بخونه باید بعنوان یک عدد بدون علامت بهش نگاه کنه و وقتی میخواد 0x20ff رو بخونه باید بعنوان یک عدد علامت داره بهش نگاه کنه ؟؟؟
از مباحث مدار منطقی هست.به قول جناب ciavosh (http://barnamenevis.org/member.php?339838-ciavosh) سیستم اصلا حالیش نیست چی به چیه.این ها همه بحث برنامه نویسی هستش.مثلا کد های اسکی رو در نظر بگیر.این کدهای اسکی یک استاندارد هست.و همه ی نرم افزار ها هم از این کدهای اسکی پیروی می کنند.
moha//\\//\\ad
شنبه 01 شهریور 1393, 17:59 عصر
ممنون از راهنماییتون
منظورم از سیستم همون سیستم عامل یا برنامه بود
بهر حال در کل کجا این موضوع مشخص میشه ؟ ایا سیستم عامل این کارو میکنه یا برنامه ی ما؟
چون دست آخر اینا میرن تو یه صف قرار میگین و پردازش میشن
شما در نظر بگیرید
int a=1
int b=-1
cout<<a+b
حالا کابر وقتی رو این برنامه کلیک میکنه سیستم عامل بر اساس ساختار فایل اجرایی اون بخش از کد اجرایی رو به ماشین میده cpu هم اجرا میکنه و جواب رو به سیستم عامل میده ! بعد چی میشه؟
میخوام بدونم کجا تکلیف این مثبت و منفی ها روشن میشه؟
ciavosh
شنبه 01 شهریور 1393, 18:50 عصر
برنامه ای که داده را از حافظه میخواند مشخص می کند آن داده چگونه تفسیر شود. حال این برنامه می تواند بخشی از نرم افزار شما یا سیستم عامل باشد.
omid_kma
شنبه 01 شهریور 1393, 19:39 عصر
ببینید شما وقتی که یک عدد از نوع int یا unsigned int تعریف می کنید کاری که در اصل انجام میدید اینه که 32 تا صفر و یک برنامتون می گیره و حالا مثلا 100 رو میزارید داخل این عدد 100 به باینری تبدیل میشه و این 0 و 1 ها ست میشن .
که اگر عدد unsigned باشه این بیت آخر علامت رو تعیین می کنه سیستم چیزی به غیر از این بیت ها چیزی نمی دونه .
حالا کابر وقتی رو این برنامه کلیک میکنه سیستم عامل بر اساس ساختار فایل اجرایی اون بخش از کد اجرایی رو به ماشین میده cpu هم اجرا میکنه
درست نیست سیستم چیزی رو بر اساس ساختار فایل به ماشین نمیده !
این برنامه هست که میگه چه چیزی چه شکلی اجرا بشه .
ببینید هر cpu یکسری رجیستر داره (حافظه های فوق العاده سریع و حجم کم ) شما تمام کاری که توی برنامه نویسی انجام میدید اینه که تعیین می کنید چه چیزی از حافظه رم بره داخل register ها و چه عملیاتی روش انجام بشه هیچ چیز جادویی هم وجود نداره توی زبان های سطح بالا مثل C شما این که چی بره داخل register رو تعیین نمی کنید ولی کامپایلری که دارید بر اساس یکسری الگو مشخص اول کد رو به اسمبلی تبدیل می کنه بعد کد اسمبلی رو اجرا می کنه .
مثلا وقتی که یک جمع ساده 1 + 6 انجام میدید کامپایلر این کد اسمبلی رو تولید می کنه :
#include<iostream>
int main ()
{
int c;
__asm
{
mov eax,1 ;//ferestadan 1 be "register" eax
mov ecx,6 ;//ferestadan 6 be register eax
add eax,ecx ;//in dastoor be cpu mige ke eax va ebx ro ba ham + bezan
//bad az jam zadan natije dakhele eax zakhire mishe
mov c,eax ;//natije ro az register be variable c dakhele ram montaghel mikonim
};
std::cout<<c;
}
دستور بالا میره داخل cpu و cpu بیت ها رو یکی یکی با هم جمع میزنه
حالا اگر اعداد unsigned هم باشن دقیقا همین کار انجام میشه فقط تفسیر این بیت ها توی برنامه تفاوت داره/
تعریف متغیر هم به همین شکل هست یک فضا برنامه داره به اسم data segment وقتی که برنامه اجرا میشه سیستم عامل به اندازه ای که لازم دارید فضا از رم جدا می کنه و به برنامه اختصاص میده متغیر ها داخل این فضا بصورت یک مجموعه از بیت ذخیره میشن که میشه بر حسب سایز متغیر و محل تعریف بهشون دسترسی داشت .
این بحث خیلی کلی تر از اینه که بشه این جا توضیح داد شما که این قدر به این که چه اتفاقی میفته علاقه دارید من پیشنهاد می کنم کتاب Assembly language for x86 processor (http://www.amazon.com/Assembly-Language-x86-Processors-Edition/dp/013602212X) رو مطالعه کنید .
motherboard
شنبه 01 شهریور 1393, 20:11 عصر
جناب omid_kma (http://barnamenevis.org/member.php?323331-omid_kma) من کدی رو که در بالا گذاشتید رو با کدبلاکس امتحان کردم اما ارور می داد!!! ایا کد درسته؟
ciavosh
شنبه 01 شهریور 1393, 20:21 عصر
جناب omid_kma (http://barnamenevis.org/member.php?323331-omid_kma) من کدی رو که در بالا گذاشتید رو با کدبلاکس امتحان کردم اما ارور می داد!!! ایا کد درسته؟
چه خطایی؟ دیگه برنامه نویس میدونه متن خطا خیلی مهمه دیگه.
motherboard
شنبه 01 شهریور 1393, 20:41 عصر
چه خطایی؟ دیگه برنامه نویس میدونه متن خطا خیلی مهمه دیگه.
اول شما هم کد رو یک امتحانی بکن تا من هم بگم چه خطایی صورت گرفته.
ciavosh
شنبه 01 شهریور 1393, 21:27 عصر
اول شما هم کد رو یک امتحانی بکن تا من هم بگم چه خطایی صورت گرفته.
مشکلی نداره.
motherboard
شنبه 01 شهریور 1393, 21:42 عصر
عجیبه.این رو تو کد بلاکس تست کردم.
122585
ciavosh
شنبه 01 شهریور 1393, 21:48 عصر
asm__ فکر کنم فقط-مایکروسافت باشه. اونم 32 بیت.
alireza es
شنبه 01 شهریور 1393, 21:50 عصر
asm__ فکر کنم فقط-مایکروسافت باشه. اونم 32 بیت.
میشه بگین تو کامپایلر های MinGw و g++ چیه؟
motherboard
شنبه 01 شهریور 1393, 22:06 عصر
asm__ فکر کنم فقط-مایکروسافت باشه. اونم 32 بیت.
همون کدی رو که تونستی کامپایل کنی بذار تا ببینیم چی به چیه.
motherboard
شنبه 01 شهریور 1393, 22:30 عصر
مشکلی نداره.
asm__ فکر کنم فقط-مایکروسافت باشه. اونم 32 بیت.
خودمونیم تو هم فیلمی هستی ها اقا سیاوش :لبخند:
اولش میگی مشکلی نداره و بعد میای می گی که فکر می کنی که asm__ مال مایکروسافت باشه.!!!! خیلی فیلم سینمایی هستی!!!!
حالا بگذریم از این ها!!!! اما به نظر من اصلا asm__ غلط هستش.چون در اون حالت تو ادیتور هایلایت نمیشه و وقتی اون اندرلاین ها رو برمی داریم asm هایلایت میشه.پس صاحب کد کجاست؟؟:عصبانی++:
(http://barnamenevis.org/member.php?323331-omid_kma)
ciavosh
شنبه 01 شهریور 1393, 22:39 عصر
خودمونیم تو هم فیلمی هستی ها اقا سیاوش :لبخند:
اولش میگی مشکلی نداره و بعد میای می گی که فکر می کنی که asm__ مال مایکروسافت باشه.!!!! خیلی فیلم سینمایی هستی!!!!
حالا بگذریم از این ها!!!! اما به نظر من اصلا asm__ غلط هستش.چون در اون حالت تو ادیتور هایلایت نمیشه و وقتی اون اندرلاین ها رو برمی داریم asm هایلایت میشه.پس صاحب کد کجاست؟؟:عصبانی++:
(http://barnamenevis.org/member.php?323331-omid_kma)
من اجراش کردم گفتم درسته. دیدم گیر کردی بهت گفتم چرا.
omid_kma
شنبه 01 شهریور 1393, 22:58 عصر
خودمونیم تو هم فیلمی هستی ها اقا سیاوش :لبخند:
اولش میگی مشکلی نداره و بعد میای می گی که فکر می کنی که asm__ مال مایکروسافت باشه.!!!! خیلی فیلم سینمایی هستی!!!!
حالا بگذریم از این ها!!!! اما به نظر من اصلا asm__ غلط هستش.چون در اون حالت تو ادیتور هایلایت نمیشه و وقتی اون اندرلاین ها رو برمی داریم asm هایلایت میشه.پس صاحب کد کجاست؟؟:عصبانی++:
(http://barnamenevis.org/member.php?323331-omid_kma)
ایشون درست میگن __asm مخصوص ویژوال استودیو هست داخل gcc سینتکس متفاوته !
#include<iostream>
int main ()
{
int c=0;
asm(
"mov $1, %eax;"
"mov $6, %ecx;"
"add %ecx, %eax;"
);
asm ("mov %%eax, %0;"
: "=r" ( c ));
std::cout<<c;
}
motherboard
شنبه 01 شهریور 1393, 23:17 عصر
ما مخلص همتون هستیم. اقا سیاوش از بچه های ناب روزگارند.بابت پاسخ ها از همگی ممنون هستم
moha//\\//\\ad
سه شنبه 04 شهریور 1393, 00:38 صبح
ببینید شما وقتی که یک عدد از نوع int یا unsigned int تعریف می کنید کاری که در اصل انجام میدید اینه که 32 تا صفر و یک برنامتون می گیره و حالا مثلا 100 رو میزارید داخل این عدد 100 به باینری تبدیل میشه و این 0 و 1 ها ست میشن .
که اگر عدد unsigned باشه این بیت آخر علامت رو تعیین می کنه سیستم چیزی به غیر از این بیت ها چیزی نمی دونه .
درست نیست سیستم چیزی رو بر اساس ساختار فایل به ماشین نمیده !
این برنامه هست که میگه چه چیزی چه شکلی اجرا بشه .
ممنون از راهنماییتون در مورد ساختار فایل باید عرض کنم من حرف شما رو نمی پسندم در خصوص اینکه "این برنامه هست که میگه چه چیزی و چه شکلی اجرا بشه"
چون خب قطعا قرار نیست سیستم عامل دست ببره تو کدهای ما و دس کاری کنه
اما کامپایلر هایی که ما در ویندوز استفاده میکنیم برای ما فایل exe تولید میکنن
و این ساختار فایل منحصر به مایکروسافت هست و حتما میدونید که در ساختار فایل های PE که exe هم شامل اونهاست از بیت صفر تا اخر کدهای ما نیستن و صرفا اجرایی هم نیستن
لذا هر برنامه در اجرا ابتدا به سیستم عامل داده میشه و سیستم عامل پس از بازکردن فایل قسمت اجرایی رو در صف پردازنده قرار میده (که اینجا بحث الگوریتم های زمان بندی برای سیستم عامل مطرح میشه) و اجرا میشه و این همون دلیل اجرا نشدن فایل های exe در سیستم عامل های دیگه (در حالت عادی) است
برا همین بود که گفتم میخوام بدونم کجا چه اتفاقی میفته
در نهایت اینکه من هنوز به جوابم نرسیدم اما فک کنم همون قضیه ای که خودتون اشاره کردید درست باشه
یعنی اینکه ما برای هر برنامه سگمنت کد و پشته و داده داریم که توسط اینها مشخص میشه کدوم متغییر یا خونه ی حافظه چجوری باید باهاش رفتار بشه
که البته به شدت مشتاقم این موضوع ریز تر بررسی بشه
ciavosh
سه شنبه 04 شهریور 1393, 01:33 صبح
ممنون از راهنماییتون در مورد ساختار فایل باید عرض کنم من حرف شما رو نمی پسندم در خصوص اینکه "این برنامه هست که میگه چه چیزی و چه شکلی اجرا بشه"
چون خب قطعا قرار نیست سیستم عامل دست ببره تو کدهای ما و دس کاری کنه
اما کامپایلر هایی که ما در ویندوز استفاده میکنیم برای ما فایل exe تولید میکنن
و این ساختار فایل منحصر به مایکروسافت هست و حتما میدونید که در ساختار فایل های PE که exe هم شامل اونهاست از بیت صفر تا اخر کدهای ما نیستن و صرفا اجرایی هم نیستن
لذا هر برنامه در اجرا ابتدا به سیستم عامل داده میشه و سیستم عامل پس از بازکردن فایل قسمت اجرایی رو در صف پردازنده قرار میده (که اینجا بحث الگوریتم های زمان بندی برای سیستم عامل مطرح میشه) و اجرا میشه و این همون دلیل اجرا نشدن فایل های exe در سیستم عامل های دیگه (در حالت عادی) است
برا همین بود که گفتم میخوام بدونم کجا چه اتفاقی میفته
در نهایت اینکه من هنوز به جوابم نرسیدم اما فک کنم همون قضیه ای که خودتون اشاره کردید درست باشه
یعنی اینکه ما برای هر برنامه سگمنت کد و پشته و داده داریم که توسط اینها مشخص میشه کدوم متغییر یا خونه ی حافظه چجوری باید باهاش رفتار بشه
که البته به شدت مشتاقم این موضوع ریز تر بررسی بشه
نشد!
سیستم عامل یک مدول داره به نام لودر Loader که فایل اجرایی رو تو حافظه لود میکنه و ویندوز طی یک مکانیزم نسبتاً پیچیده برای آن برنامه یک پراسس درست میکنه که یک ساختار داده هست که با داده های مربوطه پر می شه یکی از آن موارد آدرس کد اجرایی برنامه شما در حافظه است.
هر پراسس حد اقل یک ریسمان داره (Thread) که منظور توالی کد اجرایی است.
مدول دیگری در هسته ویندوز به نام Scheduler وقت پردازنده را بین پراسس هایی (ریسمانهایی) که در حالت انتظار رخداد نیستند تقسیم میکنه.
حال نکته مهم انجاست که وقتی نوبت به پراسس برنامه شما میرسه، پردازنده فقط و فقط کد برنامه شما را بدون هیچ تغییری اجرا میکنه (اینکه پردازنده های امروزی چند ریسمان را با هم اجرا میکنند را فعلا نادیده میگیریم چون به هر حال گرچه ریسمانها روی هم تاثیر دارند ولی روی یکدیگر کنترل و تسلط مستقیم ندارند)
پس اینکه با داده های درون حافظه چگونه برخورد بشه فقط به کد برنامه شما بستگی داره
اما یک نکته دیگر هم هست: فرض کنید برنامه شما نوشته ای را روی کنسول خروجی میدهد. در این حالت پردازنده نه تنها کد برنامه شما را اجرا میکند، بلکه قسمتی از کد سیستم عامل را که مربوط به عملیات ورودی/خروجی است و توسط برنامه فراخوانی شده را نیز اجرا میکند. در واقع حتی ساده ترین برنامه هم در زمان اجرا، تعدادی از توابع سیستم عامل، C-Runtime و C++-Runtime را فراخوانی میکند.
درک این موارد با مطالعه بیشتر و درک عمیقتر از سیستم ساده تر میشود.
Coder#
سه شنبه 04 شهریور 1393, 05:01 صبح
پاسخ ها غلط بودن; همگی.
کتاب Operating Systems- Internals and Design Principles (http://www.speedyshare.com/RJjDH/download/Operating-Systems-Internals-and-Design-Principles.rar) رو بخون.
moha//\\//\\ad
سه شنبه 04 شهریور 1393, 20:28 عصر
نشد!
سیستم عامل یک مدول داره به نام لودر Loader که فایل اجرایی رو تو حافظه لود میکنه و ویندوز طی یک مکانیزم نسبتاً پیچیده برای آن برنامه یک پراسس درست میکنه که یک ساختار داده هست که با داده های مربوطه پر می شه یکی از آن موارد آدرس کد اجرایی برنامه شما در حافظه است.
هر پراسس حد اقل یک ریسمان داره (Thread) که منظور توالی کد اجرایی است.
مدول دیگری در هسته ویندوز به نام Scheduler وقت پردازنده را بین پراسس هایی (ریسمانهایی) که در حالت انتظار رخداد نیستند تقسیم میکنه.
حال نکته مهم انجاست که وقتی نوبت به پراسس برنامه شما میرسه، پردازنده فقط و فقط کد برنامه شما را بدون هیچ تغییری اجرا میکنه (اینکه پردازنده های امروزی چند ریسمان را با هم اجرا میکنند را فعلا نادیده میگیریم چون به هر حال گرچه ریسمانها روی هم تاثیر دارند ولی روی یکدیگر کنترل و تسلط مستقیم ندارند)
پس اینکه با داده های درون حافظه چگونه برخورد بشه فقط به کد برنامه شما بستگی داره
اما یک نکته دیگر هم هست: فرض کنید برنامه شما نوشته ای را روی کنسول خروجی میدهد. در این حالت پردازنده نه تنها کد برنامه شما را اجرا میکند، بلکه قسمتی از کد سیستم عامل را که مربوط به عملیات ورودی/خروجی است و توسط برنامه فراخوانی شده را نیز اجرا میکند. در واقع حتی ساده ترین برنامه هم در زمان اجرا، تعدادی از توابع سیستم عامل، C-Runtime و C++-Runtime را فراخوانی میکند.
درک این موارد با مطالعه بیشتر و درک عمیقتر از سیستم ساده تر میشود.
قبول ندارم
ببینید دوست عزیز من میگم یک فایل exe تماما کد اجرایی نیست که cpu بخواد اون رو اجرا کنه مستقیم
در واقعا با فراخوانی یک فایل اجرایی سیستم عامل مشخص میکنه که کدوم قسمت از فایل اجرایی وارد پردازش بشه حالا به اینکه چجوری وارد پردازش میشه و چه اتفاقی میفته کاری ندارم منظور اصلی من اینه که فایل exe به صورت کامل مورد پردازش قرار نمیگیره و فقط قسمت اجرایی اون هست که وارد پردازش میشه و قطعا قبل از اجرا سیستم عامل دخالت میکنه
شکل زیر رو ببینید
در شکل زیر فقط قسمت section ها حاوی کد اجرایی در هر فایل exe یا به طور کلی PE هستن پس این سیستم عامله که اون ها رو باز میکنه و با توجه به امضای هر فایل به قول شما یه نخ بهش میده
پس یک فایل تماما اجرا نمیشه
http://upload.wikimedia.org/wikipedia/commons/e/ea/RevEngPEFile.JPG
https://software.intel.com/sites/default/files/m/d/4/1/d/8/keep-memory-002.gif
این هم چند لینک مفید در مورد PE
http://en.wikipedia.org/wiki/Portable_Executable
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680547%28v=vs.85%29.aspx
ciavosh
سه شنبه 04 شهریور 1393, 21:01 عصر
قبول ندارم
ببینید دوست عزیز من میگم یک فایل exe تماما کد اجرایی نیست که cpu بخواد اون رو اجرا کنه مستقیم
در واقعا با فراخوانی یک فایل اجرایی سیستم عامل مشخص میکنه که کدوم قسمت از فایل اجرایی وارد پردازش بشه حالا به اینکه چجوری وارد پردازش میشه و چه اتفاقی میفته کاری ندارم منظور اصلی من اینه که فایل exe به صورت کامل مورد پردازش قرار نمیگیره و فقط قسمت اجرایی اون هست که وارد پردازش میشه و قطعا قبل از اجرا سیستم عامل دخالت میکنه
شکل زیر رو ببینید
در شکل زیر فقط قسمت section ها حاوی کد اجرایی در هر فایل exe یا به طور کلی PE هستن پس این سیستم عامله که اون ها رو باز میکنه و با توجه به امضای هر فایل به قول شما یه نخ بهش میده
پس یک فایل تماما اجرا نمیشه
http://upload.wikimedia.org/wikipedia/commons/e/ea/RevEngPEFile.JPG
https://software.intel.com/sites/default/files/m/d/4/1/d/8/keep-memory-002.gif
این هم چند لینک مفید در مورد PE
http://en.wikipedia.org/wiki/Portable_Executable
http://msdn.microsoft.com/en-us/library/windows/desktop/ms680547%28v=vs.85%29.aspx
قبول ندارید؟ مگر اینها گمانه زنی است که شما قبول ندارید؟ شما دارید چند مبحث مختلف رو با هم قاطی میکنید که ربطی به هم ندارند. من هم میدونم فرمت فایلهای اجرایی در سیستم های مختلف فرق میکنه. قطعاً پردازنده کد اجرایی درون فایل رو اجرا میکنه نه فرضاً رشته های ذخیره شده در فایل اجرایی یا اطلاعات relocation رو.
برنامه شما در هر سیستم عاملی دقیقاً از یک نقطه مشخص اجرا میشه. سیستم عامل نمیاد از یک جایی به دلخواه برنامه رو اجرا کنه. اصلاً منطقی هم نیست که چنین کاری بکنه. سیستم عامل هیچ گاه توالی اجرای برنامه ها رو تغییر نمیده.
شما اصلاً فرض کنید شما کد سیستم عامل رو نوشته باشید و شروع کار پردازنده با اجرای کد سیستم عامل شما شروع بشه. حالا دیگه "سیستم" یعنی کد سیستم عامل شما که پردازنده داره اجرا میکنه.
moha//\\//\\ad
سه شنبه 04 شهریور 1393, 21:30 عصر
اگه یه نگاه به چند پست اخیر من کرده باشید من دارم همین حرف رو میزنم که این سیستم عامل هست که مشخص میکنه کجای فایل اجرا بشه و اون نقطه ی مشخص که شما میگید همون سکشن های کد هست
ciavosh
سه شنبه 04 شهریور 1393, 21:44 عصر
اگه یه نگاه به چند پست اخیر من کرده باشید من دارم همین حرف رو میزنم که این سیستم عامل هست که مشخص میکنه کجای فایل اجرا بشه و اون نقطه ی مشخص که شما میگید همون سکشن های کد هست
سیستم عامل مشخص میکنه؟ یا سکشن کد هست؟
شاید بهتر بود با دقت بیشتری پستها رو میخوندین شاید به جوابتون میرسیدین. با این رویکرد بعید میدونم.
متاسفانه بنده اشتباه کردم با دیدن جوابی که به آقا امید دادید باز هم پاسخ دادم. از این به بعد هم تا به صورت مستقیم ازم درخواست نشه جواب هیچ سوالی رو نمیدم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.