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

کمک و پشتیبانی => سایر توزیع‌های گنو/لینوکس => نویسنده: sar در 07 تیر 1395، 11:18 ب‌ظ

عنوان: اجرای دستور
ارسال شده توسط: sar در 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 در 08 تیر 1395، 06:55 ق‌ظ
اونطور که من خوندم radamsa برنامه ای واسه fuzz هستش؛

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

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

البته شاید هم من اشتباه میکنم
عنوان: پاسخ : اجرای دستور
ارسال شده توسط: sar در 08 تیر 1395، 07:32 ب‌ظ
خود این دستور چیکار می کنه؟
gzip -c /bin/bash > sample.gz
 و همچنین
gzip -dc fuzzed.gz > /dev/null
   test $? -gt 127 && break
اره درست می فرمایین باعث کرش شدنش می شه
عنوان: پاسخ : اجرای دستور
ارسال شده توسط: B در 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 در 09 تیر 1395، 07:56 ب‌ظ
خیلی ممنون
دکمه تشکر پیدا نکردم!