লিনাক্সে ভাগ করা লাইব্রেরিগুলি কার্যকর করা যায় কেন?


8

আমি উৎসুক.

bash-3.00$  ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'

সবকিছুই কেবল + আর-র সাথে ঠিকঠাকভাবে কাজ করে বলে মনে হচ্ছে। আমি লক্ষ্য করেছি যে। / S / usr / lib এর বেশিরভাগ অংশে + এক্স সেট থাকে ...

ভাগ করা libs এক্সিকিউটেবল বিট সেট আছে বলে মনে করা হয় কেন? আমি সেট না করলে কী হতে পারে?


2
সঠিকভাবে চলতে লাইব্রেরিগুলিতে অবশ্যই অবশ্যই + x প্রয়োজন হয় না। সম্ভবত তারা লিঙ্ক হয়? লিঙ্কগুলি অনুসরণ করতে + এক্স প্রয়োজন হবে।
ক্রিস এস

হ্যাঁ, তাদের + x প্রয়োজন নেই, তবুও বেশিরভাগ লাইব্রেরিতে এটি সেট করা আছে।
টমো

এই প্রশ্নের এছাড়াও ইউনিক্স ও লিনাক্স জিজ্ঞাসা করা হয়েছে: unix.stackexchange.com/questions/40587/... (এবং সঠিক উত্তরটি পেয়েছিলাম সেখানে)
মাইকেল Górny

উত্তর:


3

আসলে এটি lddবাস্তবায়নের উপর নির্ভর করে । lddসাধারণত একটি স্ক্রিপ্ট হয় আপনি কোথায় এবং কেন এই ত্রুটিটি পেয়েছেন তা দেখতে আপনি এটি সম্পাদনা করতে পারেন।

উবুন্টু 10.04-এ কেবল অনুমতি lddপরীক্ষা করে দেখুন read। যদি ফাইলটি ইএলএফ ( এক্সিকিউটেবল এবং লিংকযোগ্য ফর্ম্যাট ) না হয় তবে এটি ত্রুটিটিকে গতিশীল নির্বাহযোগ্য নয়-rw-r--r--উদাহরণস্বরূপ, এখানে সমস্ত লিবিস রয়েছে

$ find /usr/lib -type f -name "libm*.so*" -ls
(...)
-rw-r--r--   1 root     root       216800 Feb 26 22:20 /usr/lib/libmp.so.3.1.16
-rw-r--r--   1 root     root        76728 Mar 14 04:23 /usr/lib/libmjpegutils-1.9.so.0.0.0
-rw-r--r--   1 root     root       134464 Jan 29  2010 /usr/lib/libm17n-core.so.0.3.0
-rw-r--r--   1 root     root       290480 Feb 17  2010 /usr/lib/libmtp.so.8.3.2

xভাগ করা লাইব্রেরির জন্য অ্যাক্সেস চাওয়াটা হতভম্ব নয় । executableমোড সম্মেলন যা OS প্রবেশের অধিকার নিয়ন্ত্রণ আরেকটি স্তর দেয়। এক্সিকিউটেবল লোডার ব্যবহারকারীরা এটি সম্পাদন করতে পারে তা নিশ্চিত করতে, তবে ত্রুটিগুলি রোধ করতে (কিছু স্ক্রিপ্ট বা প্রোগ্রামগুলি কিছু লোক দ্বারা চালিত করা উচিত নয়) নিয়ন্ত্রণ করে access

এটিকে একই কারণে ভাগ করা লাইব্রেরিগুলিতে প্রসারিত করা যেতে পারে - তবে ভাগ করা লাইব্রেরিগুলি তাদের দ্বারা চালিত হতে পারে না , এবং দুর্ঘটনার দ্বারা ব্যবহৃত হওয়ার সম্ভাবনা কম ত্রুটিযুক্ত )। সুতরাং প্রয়োজন কম সুস্পষ্ট ( rঅ্যাক্সেস যথেষ্ট)।


3

আপনি আসলে অনেকগুলি লাইব্রেরি সম্পাদন করতে পারেন, উদাহরণস্বরূপ দেখুন যখন আপনি /lib/libc.so.6সাম্প্রতিক জিএনইউ / লিনাক্স সিস্টেমে আপনার শেলটিতে টাইপ করেন তখন কী ঘটে ।


0

-x এর সাথে এক্সিকিউটেবল ফাইল থাকার মতো ভাবেন। আপনি এটি কার্যকর করতে সক্ষম হবেন না। এই লাইব্রেরিগুলিকে সাধারণ ফাংশনগুলির সংগ্রহ হিসাবে বিবেচনা করুন, যেগুলি অন্য প্রোগ্রাম দ্বারা ডাকা হচ্ছে (আসুন মাইপ্রোগ্রাণটি বলি)। আপনি যদি গ্রন্থাগারগুলি / কার্য সম্পাদন করতে না পারেন ... তবে আপনার কিছুই নেই

একটি উদাহরণ

function1() {} 
function2() {} 
int main() { 
printf("Let's call func1"); 
function1(); 
printf("Let's call func2"); 
function2(); 
} 

এখন আপনি যদি অন্য ফাইলে ফাংশন 1 এবং ফাংশন 2 রাখেন এবং আপনি এটি অন্তর্ভুক্ত করেন তবে আপনি একটি গ্রন্থাগার। (অবশ্যই এটি আরও জটিল কিছু This এটি কেবল একটি উদাহরণ)

তবে যে কোনও ক্ষেত্রে, আপনি দেখতে পাচ্ছেন, আপনাকে লাইব্রেরিতে অন্তর্ভুক্ত করা কোডটি কার্যকর করতে হবে


কিন্তু আপনি এক্সিকিউটেবল কার্যকর করেন, লাইব্রেরি নয়।
Ignacio Vazquez-Abram

উপরের সম্পাদিত সংস্করণটি দেখুন
নিকোলাইডিস ফোটিস

0

কীটি হ'ল ফাইল ফর্ম্যাট, এক্সিকিউটেবল এবং লিংকযোগ্য ফর্ম্যাট। যেহেতু একই সঠিক ফাইল ফর্ম্যাটটি কার্যকর করা এবং ভাগ করা লাইব্রেরি উভয়ই সনাক্ত করতে ব্যবহৃত হয়, উভয়কেই ওএস লোডারের জন্য উপযুক্ত নির্বাহযোগ্য অনুমতি থাকতে হবে। এটি কোনও একক লোডার এবং এক্সিকিউটেবলদের ডিএসও হিসাবে ব্যবহার করতে সক্ষম করে যদি তাদের মধ্যে একটি চিহ্ন সারণী অন্তর্ভুক্ত থাকে।


সুতরাং, লোডার লোড করার জন্য জিনিসগুলি সনাক্ত করতে ফাইল শিরোনাম নয়, অনুমতি বিট ব্যবহার করে?
টমো

লোডার ফাইলটি শিরোনামটি DYN বা EXEC হিসাবে সনাক্ত করতে এবং উপযুক্ত কাজটি করতে ব্যবহার করে। এক্সিকিউট বিটটি লোডার নয়, ওএসের জন্য। ইএলএফ একটি এক্সিকিউটেবল বিন্যাস, এক্সিকিউট বিট ছাড়াই ওএস লোডারকে শিরোনামগুলি পড়ার জন্য ফাইলটি চালাতে দেয় না। ELF en.wikedia.org/wiki/Executable_and_Linkable_ Format এর জন্য আরও উইকিপিডিয়া দেখুন ।
এনজওয়ালফিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.