আমি জানি যে সিস্টেম কল ইন্টারফেসটি নিম্ন স্তরে প্রয়োগ করা হয় এবং তাই আর্কিটেকচার / প্ল্যাটফর্ম নির্ভর, "জেনেরিক" কোড নয়।
তবুও, লিনাক্স 32-বিট x86 কার্নেলগুলিতে সিস্টেম কলগুলির অনুরূপ আর্কিটেকচার লিনাক্স 64৪-বিট x86_64 তে একই নম্বর রাখার কারণগুলি আমি কেন পরিষ্কারভাবে দেখতে পাচ্ছি না? এই সিদ্ধান্তের পিছনে অনুপ্রেরণা / কারণ কী?
আমার প্রথম অনুমানটি হ'ল ব্যাকগ্রাউন্ডিং কারণটি ছিল একটি x86_64 সিস্টেমে 32-বিট অ্যাপ্লিকেশনগুলি চলমান রাখা, যাতে সিস্টেম কল নম্বরটিতে যুক্তিসঙ্গত অফসেটের মাধ্যমে সিস্টেমটি জানতে পারে যে ব্যবহারকারী-স্থানটি 32-বিট বা 64-বিট যথাক্রমে। এটি অবশ্য ঘটনা নয়। কমপক্ষে আমার কাছে মনে হয়েছে যে x86_64 তে সিস্টেম কল নম্বর 0 হওয়া () এই চিন্তার সাথে একত্রিত করা যায় না।
আরেকটি অনুমান করা হয়েছে যে সিস্টেম কল নম্বরগুলি পরিবর্তনের ক্ষেত্রে কোনও সুরক্ষা / কঠোর পটভূমি থাকতে পারে, এমন কিছু যা আমি নিজেকে নিশ্চিত করতে সক্ষম হইনি।
আর্কিটেকচার নির্ভর কোড কোড অংশ বাস্তবায়নের চ্যালেঞ্জ সম্পর্কে অজ্ঞ থাকায় আমি এখনও অবাক হই যে সিস্টেম কল নম্বরগুলি কীভাবে পরিবর্তন করতে হবে , যখন কোনও প্রয়োজন নেই বলে মনে হচ্ছে (এমনকি কোনও 16-বিট রেজিস্টারও এখন আরও বেশি পরিমাণে জমা রাখবে তবে সমস্ত প্রতিনিধিত্ব করার জন্য 346 ডলার নম্বর রয়েছে) কল), ব্রেক সামঞ্জস্যতা ব্যতীত অন্য কিছু অর্জনে সহায়তা করবে (যদিও লাইব্রেরির মাধ্যমে সিস্টেম কলগুলি ব্যবহার করে, libc, এটি প্রশমিত করে)।