انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: اجرای دستور  (دفعات بازدید: 2059 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین sar

  • Newbie
  • *
  • ارسال: 3
  • جنسیت : پسر
اجرای دستور
« : 07 تیر 1395، 11:18 ب‌ظ »
با سلام
بچه من این دستور رو اجرا میکنم:

 $ gzip -c /bin/bash > sample.gz
 $ while true
 do
   radamsa sample.gz > fuzzed.gz
   gzip -dc fuzzed.gz > /dev/null
   test $? -gt 127 && break
 done
 این خطا رو میده
gzip:fuzzed.gz:invalid compressd data--crc error
gzip:fuzzed.gz:invalid compressd data--length error

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
پاسخ : اجرای دستور
« پاسخ #1 : 08 تیر 1395، 06:55 ق‌ظ »
اونطور که من خوندم radamsa برنامه ای واسه fuzz هستش؛

شما فایل sample.gz رو دادی بهش و fuzzed.gz رو توجویل گرفتین؛ که این فایل دستگاری شده توسط radamsa تا نرم افزار gzip رو دچار خطای احمالی بکنه و نرم افزار کرش بکنه؛

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

البته شاید هم من اشتباه میکنم

آفلاین sar

  • Newbie
  • *
  • ارسال: 3
  • جنسیت : پسر
پاسخ : اجرای دستور
« پاسخ #2 : 08 تیر 1395، 07:32 ب‌ظ »
خود این دستور چیکار می کنه؟
gzip -c /bin/bash > sample.gz
 و همچنین
gzip -dc fuzzed.gz > /dev/null
   test $? -gt 127 && break
اره درست می فرمایین باعث کرش شدنش می شه
« آخرین ویرایش: 08 تیر 1395، 07:35 ب‌ظ توسط sar »

آفلاین B

  • Sr. Member
  • *
  • ارسال: 354
  • جنسیت : پسر
پاسخ : اجرای دستور
« پاسخ #3 : 08 تیر 1395، 09:03 ب‌ظ »
از اونجایی که تمام سوییچ ها رو حفظ نیستم؛ یه ترمینال باز کردم و در خط فرمان نوشتم :
[/code]man gzip

و دنبال سوییچ  گشتم
-c
دیدم نوشته:
نقل‌قول
تمامی خروجی‌ها رو در خروجی استاندارد مینویسه

دستور زیر:
gzip -c /bin/bash > sample.gz
میاد فایل بش (bash) رو میگیره و تبدیل به فایل فشرده میکنه ؛ و خروجی رو در فایل sample.gz‌ مینویسه؛ درواقع الان یه فایل فشرده شده استاندارد داریم

دستور زیر:
gzip -dc fuzzed.gz > /dev/nullتلاش میکنه تا فایل دستکاری شده رو از حالت فشرده خارج کنه؛ سویچ d برای اینه که از حالت فشرده خارج کنیم
خروجی رو فایل null‌ مینویسه؛ که منظورش اینه که خروجی دستور gzip رو نمیخوام ببینم و لازم نیست نشنونمون بده
دستگاه null‌ جاییه که هرچی بهش بفرستی هیچ اتفاقی نمیافته و نابود میشه

نقل‌قول
   test $? -gt 127 && break
و دستور بالا یک عبارت شرطی هستش ؛
$? یعنی کد خروجی آخرین برنامه؛ که توی مورد بالا اخرین برنامه ای که اجرا شده میشه gzip‌
* کد خروجی حالت برنامه رو پس از اجرا مشخص میکنه؛ اگه اجرای برنامه درست بود و با موفقت اجرا شد 0 هستش؛ در غیر اینصورت یه عدد دیگه هستش که استاندارد خاصی نداره؛

-gtیعنی بزرگتر از

&&به زبان ساده یعنی اگه دستورمون درست بود عبارت بعدی رو اجرا کن
در زبان غیر ساده کد خروجی دستور قبلی رو که test هستش رو میگیره؛ چون لازمه‌ی عبارت and اینه که اگه قسمت اول درست بود احتیاج به تست قسمت دوم داره (جون فقط 1 & 1 = 1) ؛ در نتیجه بناچار قسمت دوم رو هم اعتبار سنجی میکنه

breakهم باعث این میشه از حلقه خارج بشیم


درکل معنی عبارت بالا اینه که اگر کد خروجی gzip بزرگتر ۱۲۷ بود از حلقه خارج شد
حالا چرا ۱۲۷ را انتخاب کرده نمیدونم

آفلاین sar

  • Newbie
  • *
  • ارسال: 3
  • جنسیت : پسر
پاسخ : اجرای دستور
« پاسخ #4 : 09 تیر 1395، 07:56 ب‌ظ »
خیلی ممنون
دکمه تشکر پیدا نکردم!