ইউনিক্সে স্ট্রিপড এবং নট স্ট্রিপ এক্সিকিউটেবল কী?


37

ম্যান ফাইল থেকে ,

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6:  Linux/i386 swap file
   /dev/hda7:  Linux/i386 swap file
   /dev/hda8:  Linux/i386 swap file
   /dev/hda9:  empty
   /dev/hda10: empty

   $ file -i file.c file /dev/{wd0a,hda}
   file.c:      text/x-c
   file:        application/x-executable, dynamically linked (uses shared libs),
   not stripped
   /dev/hda:    application/x-not-regular-file
   /dev/wd0a:   application/x-not-regular-file

এক্সিকিউটেবল স্ট্রিপিং এর অর্থ কী?

কিছু এক্সিকিউটেবল অন্যদের না করে ছিনতাই করা হয় কেন?

উত্তর:


50

আপনি যদি gcc এর -g পতাকা সহ একটি এক্সিকিউটেবল সংকলন করেন তবে এতে ডিবাগিং তথ্য রয়েছে। এর অর্থ প্রতিটি নির্দেশের জন্য সোর্স কোডের কোন রেখাটি এটি উত্পন্ন করে এমন তথ্য রয়েছে, উত্স কোডের ভেরিয়েবলের নামটি বজায় রাখা হয় এবং রানটাইমের সময় ম্যাচিং মেমরির সাথে যুক্ত হতে পারে St এক্সিকিউটেবলের ক্ষেত্রে যা এক্সিকিউটেবলের আকার হ্রাস করতে কার্যকর করার প্রয়োজন হয় না।


10
আরও দেখুন ফালা (1) র manpage । সাধারণত স্ট্রিপ সমস্ত চিহ্ন সরিয়ে দেয় কারণ সেগুলি কঠোরভাবে প্রয়োজনীয় নয়; এটি ডিবাগিংয়ের
তথ্যও

3
ধারণাটি বেশিরভাগ এক্সিকিউটেবল ফর্ম্যাটগুলিতে সাধারণীকরণ করে, এটি জিসিসি বা এমনকি ইউনিক্সের ক্ষেত্রে নির্দিষ্ট নয় specific
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

4
আমার কাছে একটি 40 এমবি এক্সিকিউটেবল ছিল যে যখন স্ট্রিপগুলি হ্রাস করে 6MB করা হয়েছিল - ঠিক তেমনই আপনি কী ধরণের স্থানটি ডিবাগিংয়ের মাধ্যমে ডেটা গ্রহণ করা যায় তা সম্পর্কে ধারণা পাবেন।
নাথান ওসমান

সুতরাং, prog.eদিয়ে তৈরি করা হয়েছে এমন এক্সিকিউটেবলকে ছিটানো gcc -g -o prog.e prog.cকি আপনাকে সংকলনের সমতুল্য করে gcc -O0 -o prog.e prog.c?
ysap

1
@ সাইপ নং, এটির (-O) অনুকূলকরণের সাথে কিছুই করার নেই। ফাইলটি ছিনিয়ে নেওয়া হয় কি না, সমাবেশ কোড একই থাকে। আপনি ডিবাগিং তথ্য ছাড়াই একটি এক্সিকিউটেবল পাবেন (যাতে আপনি "-g" এর ক্ষতির বিষয়ে সঠিক হন) এবং সমস্ত চিহ্ন ছাড়াই (এটি, ফাংশন নাম, গ্লোবাল ভেরিয়েবলের নাম ...)। এটি "gcc -s -o prog.e prog.c" এর সমতুল্য। যখন একটি প্রোগ্রাম কার্যকর করা হয়, প্রতীকগুলি কোনও পার্থক্য করে না। তবে উদাহরণস্বরূপ মালিকানাধীন সফ্টওয়্যারটিতে সর্বদা চিহ্ন ছিনিয়ে নেওয়া হয় কারণ অন্যথায় প্রত্যেকে ফাংশনগুলির মূল নাম এবং তাদের অবস্থানগুলি জানতে পারে।
পিক্রাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.