X86 লিনাক্সের 0 টি শারীরিক ঠিকানাতে কী রয়েছে?


12

আমি নিশ্চিত নই যে এই প্রশ্নটি এখানে বা রিভার্সেইঞ্জিনিয়ারিং.স্ট্যাকেক্সেক্সঞ্জ.কম এ যাওয়া উচিত

উইকিপিডিয়া থেকে উদ্ধৃতি :

8086 প্রসেসরে, বিঘ্নিত টেবিলকে আইভিটি (বিঘ্নিত ভেক্টর টেবিল) বলা হয়। আইভিটি সর্বদা 0x0000 থেকে 0x03ff পর্যন্ত মেমরিতে একই স্থানে থাকে এবং 256 ফোর-বাইট রিয়েল মোডের দূরবর্তী পয়েন্টার (256 × 4 = 1024 বাইটের মেমরি) নিয়ে থাকে consists

আমি কিমু মনিটরে এটি খুঁজে পাই:

(qemu) xp/128xw 0
0000000000000000: 0xf000ff53 0xf000ff53 0xf000e2c3 0xf000ff53
0000000000000010: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000020: 0xf000fea5 0xf000e987 0xf000d62c 0xf000d62c
0000000000000030: 0xf000d62c 0xf000d62c 0xf000ef57 0xf000d62c
0000000000000040: 0xc0005526 0xf000f84d 0xf000f841 0xf000e3fe
0000000000000050: 0xf000e739 0xf000f859 0xf000e82e 0xf000efd2
0000000000000060: 0xf000d648 0xf000e6f2 0xf000fe6e 0xf000ff53
0000000000000070: 0xf000ff53 0xf000ff53 0xf0006aa4 0xc0008930
0000000000000080: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000090: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000c0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000d0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000e0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000100: 0xf000ec59 0xf000ff53 0xf000ff53 0xc0006730
0000000000000110: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000120: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000130: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000140: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000150: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000160: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000170: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000180: 0x00000000 0x00000000 0x00000000 0x00000000
0000000000000190: 0x00000000 0x00000000 0x00000000 0xf000ff53
00000000000001a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001c0: 0xf000d611 0xf000ec4e 0xf000ec4e 0xf000ec4e
00000000000001d0: 0xf000d61a 0xf000d623 0xf000d608 0xf000ec4e
00000000000001e0: 0xf000ff53 0x00000000 0xf000ff53 0xf000ff53
00000000000001f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53

আমি নিশ্চিত নই যে এই মানগুলি কীভাবে তৈরি করা যায়। এটি কোনও বিঘ্নিত বর্ণনাকারী টেবিলের মতো দেখায় না (এই মানগুলিকে মূল্যহীন করে সমস্ত নাল দেয়)। তাহলে আমি আসলে এখানে কী দেখছি?

উত্তর:


9

আপনার ফার্মওয়্যার যা কিছু রেখেছিল তা এতে রয়েছে।

একটি আদর্শ আধুনিক সিস্টেমে, প্রসেসর কখনই আসল মোডে প্রবেশ করে না, যেমন আমি এই এসইউ প্রশ্নোত্তর শিরোনামে ব্যাখ্যা করেছি: আধুনিক 64৪-বিট ইন্টেল চিপ পিসি কোন মোডে বুট সেক্টরটি চালায়? , শারীরিক স্মৃতির প্রথম কিবি যতটা অপ্রাসঙ্গিক তা জোহান ম্যারিয়েন এটিকে এখানে অন্য জবাব হিসাবে তৈরি করেছেন। তবে অনেক আধুনিক ফার্মওয়্যারের (এখনও) সামঞ্জস্যতা সমর্থন রয়েছে , যার অর্থ

  • পুরানো স্টাইলের পিসি / এটি বুট প্রোগ্রামগুলির মতো রিয়েল মোডের জন্য লেখা সিস্টেম সফটওয়্যারগুলি চালানোর জন্য সুরক্ষিত মোড থেকে রিয়েল মোডে রিয়েল মোডে রিয়েল মোডে রিয়েল মোড থেকে রিয়েল মোডে রিয়েল মোড থেকে রিয়েল মোডে (হ্যাঁ, পিছনে , ফিরে যেতে পারেন ) এমবিআর এবং ভিবিআর; এবং
  • তারা পুরানো রিয়েল মোড ফার্মওয়্যার এপিআই সরবরাহ করে এবং উল্লিখিত সিস্টেম সফ্টওয়্যারগুলির উপর নির্ভর করে API সমস্ত API গুলিগুলির জন্য সমস্ত ডেটা স্ট্রাকচার সেটআপ করে।

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

সুরক্ষিত মোড সিস্টেম সফ্টওয়্যারগুলিতে পুরানো রিয়েল মোড ফার্মওয়্যার এপিআইগুলির দরকার হয় না এবং প্রসেসরটি কখনও রিয়েল মোডে চালায় না, সুতরাং শারীরিক মেমরির প্রথম 1KiB- তে রিয়েল মোড আইভিটি অব্যবহৃত হয়। (v8086 সুরক্ষিত মোডটি 00000000 এবং তার উপরেের দিকে শারীরিক ঠিকানা ঠিকানা দেয় না , মনে রাখবেন। এটি যৌক্তিক ঠিকানাগুলি 00000000 এবং তারপরের দিকে পৃষ্ঠা পৃষ্ঠাগুলি দ্বারা অনুবাদ করা হয়)) আধুনিক ইএফআই সিস্টেমে ফার্মওয়্যারটি অপারেটিং সিস্টেমটিতে শারীরিক মেমরির একটি মেমরি মানচিত্র হস্তান্তর করে বুটস্ট্র্যাপ, এটি বলছে যে কোন অংশগুলি ফার্মওয়্যারের নিজস্ব সুরক্ষিত মোড এপিআইয়ের উদ্দেশ্যে সংরক্ষিত আছে এবং কোন অংশগুলি অপারেটিং সিস্টেমটিকে কেবল এগিয়ে যেতে এবং তার শারীরিক মেমরির পুলের জন্য ব্যবহার করতে বিনামূল্যে? তত্ত্ব অনুসারে, শারীরিক স্মৃতির প্রথম পৃষ্ঠাটি পরবর্তী বিভাগে থাকতে পারে।

অনুশীলনে, প্রথমত, ফার্মওয়্যারগুলি প্রায়শই শারীরিক স্মৃতির প্রথম পৃষ্ঠাকে "বুট সার্ভিস কোড" হিসাবে চিহ্নিত করে, যার অর্থ একটি অপারেটিং সিস্টেম এটি দাবি করতে পারে এবং কেবল এগিয়ে যেতে পারে এবং এটি তার শারীরিক মেমরি পুলের অংশ হিসাবে ব্যবহার করতে পারে, তবে কেবল বুট- EFI ফার্মওয়্যারের সময় পরিষেবাগুলি অপারেটিং সিস্টেম দ্বারা বন্ধ করে দেওয়া হয়েছে এবং ফার্মওয়্যারটি কেবল তার রান-টাইম পরিষেবাদি সরবরাহ করতে হ্রাস পেয়েছে। লিনাক্স কার্নেল লগ ( add_efi_memmapঅপশন সহ) এর একটি উদাহরণ ফিনবার পি পি মারফি দ্বারা দেখানো হয়েছে:

[0.000000] এফি: মেম 100: টাইপ = 3, অ্যাট্রি = 0xf, রেঞ্জ = [0x0000000000000000-0x000000000000001000) (0 এমবি)
কোন এক্স আরও মানব-পঠনযোগ্য আকারে অন্য প্রোগ্রামের সাথে ডিকোড করে:

[# 00] প্রকার: এফি বুট সার্ভিসেস কোড কোড: 0xF
      দৈহিক: 0000000000000000000000000000001000
      শুল্ক: 0000000000000000-000000000000001000

অনুশীলনে, দ্বিতীয়ত, লিনাক্স শারীরিক মেমরির এই পরিসীমাটিকে স্পষ্টভাবে উপেক্ষা করে এমনকি ফার্মওয়্যার যদি বলে যে এটি এগিয়ে যেতে পারে এবং এটি ব্যবহার করতে পারে। আপনি দেখতে পাবেন যে EFI এবং নন- EFI ফার্মওয়্যারগুলি উভয়ই একসাথে হয়ে যাবে, একবার লিনাক্সের শারীরিক মেমরি মানচিত্রটি এটি প্যাচ করে রাখে ( নাম অনুসারে কোনও ফাংশনেtrim_bios_range ) যার ফলে কার্নেল লগ বার্তা যেমন:

[0.000000] e820: আপডেট [মেম 0x00000000-0x00000fff] ব্যবহারযোগ্য ==> সংরক্ষিত

এটি আধুনিক ইএফআই ফার্মওয়্যারগুলির সাথে লড়াই করার মতো খুব বেশি কিছু নয়, যেখানে পুরানো PC98 ফার্মওয়্যারগুলির সাথে লড়াই করার জন্য আসল মোড আইভিটি ফার্মওয়্যার এপিআইয়ের অংশ নয়, যেখানে এটি ফার্মওয়্যার এপিআইয়ের অংশ তবে ফার্মওয়্যারগুলি এটি রিপোর্ট করে (মাধ্যমে অপারেটিং সিস্টেম দ্বারা blithely ওভাররাইট করা শারীরিক মেমরি হিসাবে উপলব্ধ যে স্ব-একই API)।

সুতরাং যখন তত্ত্ব যে প্রকৃত মেমরি সীমার মধ্যে পারে নির্বিচারে কোড বা ডেটা, কার্নেল মেমরি allocators ও চাহিদা-পেজড ভার্চুয়াল মেমরির ক্ষণস্থায়ী চাহিদা থেকে নির্ভর করে থাকতে; অনুশীলনে ফার্মওয়্যারটি মূলত এটি সেট আপ করার সাথে সাথে লিনাক্স এটিকে কেবল ছোঁয়াচে ফেলে দেয়।

এবং আপনার সিস্টেমে ফার্মওয়্যার এটি রিয়েল মোড আইভিটি এন্ট্রি সহ পপুলেশন করেছে। রিয়েল মোড আইভিটি এন্ট্রিগুলি অবশ্যই 16:16 দূরের পয়েন্টার, অবশ্যই, এবং যদি আপনি 2-বাইট হেক্সডাম্প ব্যবহার করে আপনার মেমোরিটি দেখেন তবে আপনি এটি সত্যিই পরিষ্কার দেখতে পাচ্ছেন। কিছু উদাহরণ:

  • আপনার বেশিরভাগ আইভিটি এন্ট্রি F000: FF53, রিয়েল মোড ফার্মওয়্যার রম অঞ্চলের ঠিকানা to এটি সম্ভবত একটি ডামি রুটিন যা একটি ছাড়া আর কিছুই করে না iret
  • আইভিটি এন্ট্রি 1 ই F000: 6AA4, যে একই রম অঞ্চলে একটি টেবিলের দিকে নির্দেশ করে।
  • আইভিটি এন্ট্রি 1 এফ C000: 8930, রিয়েল মোড ভিডিও রম ফার্মওয়্যার অঞ্চলে একটি টেবিলের দিকে নির্দেশ করে।
  • আইভিটি এন্ট্রি 43000 পয়েন্টে সি 1000: 6730, রিয়েল মোড ভিডিও আরওএম ফার্মওয়্যার অঞ্চলে অন্য একটি টেবিল।

আরও পড়া


না, আমি যা লিখেছি তা বোঝাতে চাই। ইন্টেল আর্কিটেকচার সফটওয়্যার বিকাশকারীদের ম্যানুয়াল ভলিউম 3 অধ্যায় 20 § 2
জেডিবিপি

আচ্ছা আপনার এখন আছে, কারণ এটি; যে বিভাগের প্রথম বাক্য ব্যাখ্যা করে। আমি এ থেকে সন্দেহ করি যে "ভি 8086" এর সাধারণ সংক্ষেপণটির অ-স্বীকৃতি শিববোলেথের এক ধরণের। (-:
জেডিবিপি

আপনাকে কীভাবে গুণবাচক বিশেষ্যগুলি পড়তে হবে তা শিখতে হবে। অন্যথায় মাশরুম স্যুপ ছাড়া বাঁচতে শিখুন।
জেডিবিপি

7

মূল ৮০8686 প্রসেসর আর্কিটেকচারের (৮০২+++ প্রসেসরের রিয়েল মোড হিসাবে প্রয়োগ করা হয়েছে) লিনাক্সের কোনও প্রাসঙ্গিকতা নেই, যা প্রোটেক্টেড মোডে কাজ করে। শারীরিক ঠিকানা 0-তে কোনও বাধা ভেক্টর টেবিল নেই, পরিবর্তে একটি বিঘ্নিত বর্ণনাকারী টেবিল ব্যবহার করা হবে যা বিঘ্নিত বর্ণনাকারী রয়েছে। আইডিটি স্মৃতিতে যে কোনও জায়গায় অবস্থিত হতে পারে।

লিনাক্স কার্নেলটি ফার্মওয়্যার (বিআইওএস বা ইএফআই) থেকে একটি শারীরিক মেমরি মানচিত্র পেয়েছে যা জানায় যে কোন শারীরিক মেমরি পৃষ্ঠার ফ্রেমগুলি ব্যবহারযোগ্য এবং কোনটি সংরক্ষিত বা উপস্থিত নেই। ব্যবহারযোগ্য পৃষ্ঠার ফ্রেমের পরিসীমা সামঞ্জস্যপূর্ণ নয় তবে সাধারণত এটিতে বিশাল গর্ত রয়েছে। Ditionতিহ্যগতভাবে, x86 লিনাক্স কার্নেল শারীরিক মেমরির শুরুটি এড়িয়ে চলেছে, এমনকি এটি ব্যবহারযোগ্য হিসাবে চিহ্নিত হিসাবে চিহ্নিত করা হয়। সুতরাং, শারীরিক ঠিকানা 0 লিনাক্স কার্নেল দ্বারা ব্যবহৃত হয় না।


এইবার বুঝতে পারছি. কোন ধারণা যে অব্যবহৃত পৃষ্ঠার বাকী বিষয়বস্তু কোথা থেকে এসেছে?
রোডেও

গুগলিং 53 ffপ্রকাশ করে যে এটি সম্ভবত সম্ভবত একটি ফার্মওয়্যার বা বুট লোডার দ্বারা সেটআপ করা একটি 8086 রিয়েল মোড বাধা ভেক্টর টেবিল।
জোহান মিরেন

4

স্মৃতি ডাম্পিং

সিস্টেমের অভ্যন্তরে মেমরির বিষয়বস্তুগুলি বাইরে থেকে করার জন্য এটি বিকল্প উপায়:

$ head /dev/mem | hexdump -C
00000000  53 ff 00 f0 53 ff 00 f0  53 ff 00 f0 53 ff 00 f0  |S...S...S...S...|
00000010  53 ff 00 f0 53 ff 00 f0  cc e9 00 f0 53 ff 00 f0  |S...S.......S...|
00000020  a5 fe 00 f0 87 e9 00 f0  53 ff 00 f0 46 e7 00 f0  |........S...F...|
00000030  46 e7 00 f0 46 e7 00 f0  57 ef 00 f0 53 ff 00 f0  |F...F...W...S...|
00000040  22 00 00 c0 4d f8 00 f0  41 f8 00 f0 fe e3 00 f0  |"...M...A.......|
00000050  39 e7 00 f0 59 f8 00 f0  2e e8 00 f0 d4 ef 00 f0  |9...Y...........|
00000060  a4 f0 00 f0 f2 e6 00 f0  6e fe 00 f0 53 ff 00 f0  |........n...S...|
00000070  ed ef 00 f0 53 ff 00 f0  c7 ef 00 f0 ed 57 00 c0  |....S........W..|
00000080  53 ff 00 f0 53 ff 00 f0  53 ff 00 f0 53 ff 00 f0  |S...S...S...S...|
...
...
000afea0  00 00 00 00 00 00 00 00  aa aa aa 00 aa aa aa 00  |................|
000afeb0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000b0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
*
000c0000  55 aa 40 e9 62 0a 00 00  00 00 00 00 00 00 00 00  |U.@.b...........|
000c0010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 49 42  |..............IB|

বিশ্লেষণ

000c0000 এর ওপরের অংশটি বুটলোডার সম্পর্কিত হতে পারে। আমি কেন এই সন্দেহ করব? অবস্থানের 55aah কোডটি 000c0000সাধারণত BIOS এর জন্য গৌণ বুটলোডার চালানোর জন্য ট্রিগার হিসাবে স্মৃতিতে একটি চিহ্ন হতে পারে।

তথ্যসূত্র: বুট স্বাক্ষর - BIOS

  SS # 1

যাইহোক, এই 55aah প্রদত্ত c0000h-effffh পরিসীমাতে সম্ভবত এই অংশটি PNP সম্প্রসারণ শিরোনাম:

তথ্যসূত্র: BIOS বুট স্পেসিফিকেশন

৩.৩ পিএনপি এক্সপেনশন শিরোনাম সহ ডিভাইসগুলি

অপশন রম সহ সমস্ত আইপিএল ডিভাইসে অবশ্যই একটি বৈধ বিকল্প রম শিরোনাম থাকতে হবে যা সিস্টেম মেমোরি C0000h এবং EFFFFh এর মধ্যে 2k সীমানায় থাকে এবং 55AAh দিয়ে শুরু হয়। কোনও ডিভাইসের বুটিং কেবলমাত্র যদি এটির পিএনপি এক্সপেনশন হেডার থাকে তবে তা নিয়ন্ত্রণ করা যায়। সম্প্রসারণ শিরোনাম, যার ঠিকানা অফসেট + 1Ah এ স্ট্যান্ডার্ড বিকল্প রম শিরোনামের মধ্যে থাকে, এতে ডিভাইসটি কনফিগার করতে ব্যবহৃত গুরুত্বপূর্ণ তথ্য থাকে। এটিতে ডিভাইসের বিকল্প রম (বিসিভি বা বিইভি) কোডের পয়েন্টার রয়েছে যা বিআইওএস ডিভাইস থেকে বুট করার জন্য কল করবে। পিএনপি এক্সপেনশন শিরোনামের কাঠামোর জন্য পরিশিষ্ট এ দেখুন। পিএনপি এক্সপেনশন হেডার সহ দুটি উপায় আইপিএল ডিভাইস বুট করা যায়। এটিতে একটি বিসিভি বা একটি বিইভি থাকতে হবে।

53ff ...

শুরুতে যে 53Fh ডেটা হিসাবে এটি। আসলে এটি কী তা আমার কাছে অস্পষ্ট। আরও গবেষণা করার পরে এটি সম্ভবত এমন কিছু যা লিনাক্স কার্নেল লিখেছিল বিআইওএস'র এমবিআর বুটলোডিংয়ের পরে লিনাক্স কার্নেলকে বুট করার জন্য।

সাধারণত, বুটলোডার কার্নেলটিকে মেমরিতে লোড করে এবং তারপরে কার্নেলে লাফিয়ে দেবে। এর পরে কার্নেল বুটলোডার দ্বারা ব্যবহৃত মেমরিটি পুনরায় দাবি করতে সক্ষম হবে (কারণ এটি ইতিমধ্যে এর কাজ সম্পাদন করেছে)। তবে বুট সেক্টরের মধ্যে ওএস কোড অন্তর্ভুক্ত করা এবং ওএস শুরু হওয়ার পরে এটি আবাসিক রাখা সম্ভব

আরও খনন করতে পেরে আমি এই অনুচ্ছেদটি সন্ধান করতে পেরেছিলাম: শিরোনামে একটি গবেষণামূলক গবেষণামূলক কাগজ থেকে: ম্যালিসিয়াস কোড ইনজেকশন মাধ্যমে / দেব / মেম :

1 মেমো ডিভাইস

শারীরিকভাবে ঠিকানাযোগ্য মেমরির জন্য ড্রাইভার / ইন্টারফেস হ'ল ড্রাইভার interface মেম এবং কেএমএম উভয়েরই মূল উদ্দেশ্যটি ছিল কার্নেলটি ডিবাগ করতে সহায়তা করার জন্য। কোনও অফসেট নির্বাচন করার জন্য আমরা lseek () ব্যবহার করে নিয়মিত চরিত্রের ডিভাইসের মতো ডিভাইসটি ব্যবহার করতে পারি। Kmem ডিভাইসটি অনুরূপ তবে ভার্চুয়াল ঠিকানার প্রসঙ্গে কর্নেল মেমরির একটি চিত্র সরবরাহ করে। জর্জি সার্ভার ভিএমএ মোডে ভিডিও মোডগুলি পরিচালনা করতে শারীরিক ঠিকানা 0x00000000 এ অবস্থিত বায়োএস রম ইন্টারপ্রেট ভেক্টর টেবিল (আইভিটি) VESA ভিডিও মেমরি অ্যাক্সেস করতে মেমো ডিভাইসটি ব্যবহার করে। ডসেমু বিআইওএস আইভিটি অ্যাক্সেস করতে এটি বিভিন্ন কাজের জন্য ডিস্ক রিডিং, কনসোলে প্রিন্টিং ইত্যাদি করতে সক্ষম হয়।

তথ্যসূত্র

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.