লিনাক্সের এক্সিকিউটেবল একটি লিনাক্সের একটি "স্বাদে" সংকলিত অন্য একটিতে চালিত হবে?


59

লিনাক্সের একটি স্বাদে অন্য স্বাদে চলার মতো সংক্ষিপ্ত, খুব সহজ প্রোগ্রামের নির্বাহযোগ্য যেমন নীচে প্রদর্শিত হবে? অথবা এটি আবার সংকলন করা প্রয়োজন?

মেশিন আর্কিটেকচার কি এই জাতীয় ক্ষেত্রে গুরুত্বপূর্ণ?

int main()
{
  return (99);
}

2
অসামান্য উত্তরের জন্য সবাইকে ধন্যবাদ! আমি প্রত্যাশার চেয়ে অনেক বেশি শিখেছি। কোডটি কৃত্রিমভাবে উদ্দেশ্য হিসাবে সহজ করে তুলেছি যাতে এটি যতটা সম্ভব কম লাইব্রেরির উপর নির্ভর করে; তবে আমার সত্যই সামনে বলা উচিত ছিল। আমার বেশিরভাগ সি ++ কোডিংকে প্ল্যাটফর্মগুলি জুড়ে একটি মাইক্রোসফ্ট সরঞ্জাম যেমন ভিজ্যুয়াল স্টুডিও এবং তারপরে কোডটিকে একটি * নিক্স সিস্টেমে পোর্টিং এবং পুনরায় সংশোধন করার সাথে জড়িত involved
জেসিডিন

4
এখানে প্রকাশিত অনেকগুলি দিক ও বিবেচনা আমাকে অবাক করে দিয়েছে! আমি সত্যই আশা করি উত্তর হিসাবে আমি বেশ কয়েকটি বেছে নিতে পারি। সবার আবার ধন্যবাদ! বিনীত।
জেসিডেন

2
অ্যান্ড্রয়েড একটি লিনাক্স ভিত্তিক অপারেটিং সিস্টেমও। ভাগ্য ভাল, যাইহোক, glibcসেখানে যে কোনও কোড সংকলিত চলছে , বা বিপরীতে। মঞ্জুর, এটি সম্পূর্ণ অসম্ভব
আন্ডার কেট

2
কমান্ড-লাইন সরঞ্জামটির সর্বাধিক সামঞ্জস্যের জন্য, আপনি গ্লিবসি-র পরিবর্তে ইউসিপ্লিব, ম্যাসেল বা ডায়েটলিবি ব্যবহার করতে এবং আপনার 32-বিট এক্সিকিউটেবল ( gcc -m32 -static) স্ট্যাটিকভাবে লিঙ্ক করতে পারেন । এটি করে, কোনও আই 386 বা এমডি 64 লিনাক্স এক্সিকিউটেবল চালাতে সক্ষম হবে।
পিটিএস

10
আপনি 42 ফিরে আসা উচিত ! :)
হোমুনকুলাস রেটিকুলি

উত্তর:


49

এটা নির্ভর করে. আইএ -32 (ইনটেল 32-বিট) এর জন্য কিছু সংকলিত amd64 এ চলতে পারে যেহেতু ইনটেলের লিনাক্স 32-বিট অ্যাপ্লিকেশন (উপযুক্ত সফ্টওয়্যার ইনস্টলড) সহ পিছনের দিকে সামঞ্জস্য বজায় রাখে। এখানে আপনার codeরেডহ্যাট 7.3 32-বিট সিস্টেমে সংকলিত (সার্কা 2002, জিসিসি সংস্করণ 2.96) এবং তারপরে বাইনারিটি অনুলিপি করে একটি সেন্টস 7.4 64-বিট সিস্টেমে চালিত হয় (সার্কো 2017):

-bash-4.2$ file code
code: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped
-bash-4.2$ ./code
-bash: ./code: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
-bash-4.2$ sudo yum -y install glibc.i686
...
-bash-4.2$ ./code ; echo $?
99

প্রাচীন রেডহ্যাট 7.3 থেকে সেন্টোস 7.4 (মূলত রেডহ্যাট এন্টারপ্রাইজ লিনাক্স 7.4) একই "ডিস্ট্রিবিউশন" পরিবারে রয়েছেন, তাই সম্ভবত ২০০২ থেকে কিছু অন্যান্য এলোমেলো লিনাক্স "স্ক্র্যাচ থেকে ইনস্টল" থেকে ইনস্টল করার চেয়ে আরও ভাল বহনযোগ্যতা থাকবে 2018 ।

Amd64 এর জন্য সংকলিত কিছু লিনাক্সের 32-বিট রিলিজগুলিতে চলবে না (পুরানো হার্ডওয়্যার নতুন হার্ডওয়্যার সম্পর্কে জানে না)। প্রাচীন পুরানো জিনিসগুলির উপর পরিচালিত আধুনিক সিস্টেমে সংকলিত নতুন সফ্টওয়্যারগুলির ক্ষেত্রেও এটি সত্য, কারণ গ্রন্থাগারগুলি এবং এমনকি সিস্টেম কলগুলি পিছনের পোর্টেবল নাও হতে পারে, তাই সংকলনের কৌশলগুলির প্রয়োজন হতে পারে, বা একটি পুরানো সংকলক গ্রহণ করতে পারে এবং সম্ভবত এর পরিবর্তে পুরানো সিস্টেমের উপর সংকলন। (প্রাচীন পুরানো জিনিসগুলির ভার্চুয়াল মেশিনগুলি আশেপাশে রাখার এটি একটি ভাল কারণ))

আর্কিটেকচারটি গুরুত্বপূর্ণ; এএমএম 64 (বা আইএ -32) এআরএম বা এমআইপিএস থেকে সম্পূর্ণ আলাদা তাই এর মধ্যে একটির থেকে বাইনারি অন্যটিতে চালিত হওয়ার আশা করা হয় না। mainআইএএ -32-তে আপনার কোডের বিভাগটি সমাবেশ স্তরের মাধ্যমে এর মাধ্যমে সংকলন gcc -S code.cকরে

main:
    pushl %ebp
    movl %esp,%ebp
    movl $99,%eax
    popl %ebp
    ret

যেটি একটি এমডি 64 সিস্টেমটি লেনদেন করতে পারে (লিনাক্স সিস্টেমে - এমডি 64 এর বিপরীতে ওপেনবিএসডি 32-বিট বাইনারি সমর্থন করে না ; পুরানো খিলানগুলির সাথে পিছনে সামঞ্জস্যতা আক্রমণকারীদের উইগল রুম দেয়, যেমন সিভিই -2014-8866 এবং বন্ধুরা)। এদিকে বিগ-এন্ডিয়ান এমআইপিএস সিস্টেমে main পরিবর্তে সংকলন করা হয়েছে:

main:
        .frame  $fp,8,$31
        .mask   0x40000000,-4
        .fmask  0x00000000,0
        .set    noreorder
        .set    nomacro
        addiu   $sp,$sp,-8
        sw      $fp,4($sp)
        move    $fp,$sp
        li      $2,99
        move    $sp,$fp
        lw      $fp,4($sp)
        addiu   $sp,$sp,8
        j       $31
        nop

কোন ইন্টেল প্রসেসরের কী করবে সে সম্পর্কে কোনও ধারণা থাকবে না এবং একইভাবে এমআইপিএসে ইন্টেল সমাবেশের জন্য।

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

যাহোক! আপনার কোডটি খুব সাধারণ কোড, তাই অন্য যে কোনও কিছুর চেয়ে কম পোর্টিবিলিটি সমস্যা থাকবে; প্রোগ্রামগুলি সাধারণত লাইব্রেরিগুলি ব্যবহার করে যা সময়ের সাথে সাথে পরিবর্তিত হয় (গ্লিবসি, ওপেনসেল, ...); তাদের জন্য বিভিন্ন লাইব্রেরির পুরানো সংস্করণ ইনস্টল করার প্রয়োজন হতে পারে (যেমন রেডহ্যাট সাধারণত প্যাকেজের নামে "কমপ্যাট" কোথাও রাখে)

compat-glibc.x86_64                     1:2.12-4.el7.centos

অথবা সম্ভবত গ্লিবসি ব্যবহার করা পুরানো জিনিসগুলির জন্য, বা সি ++ 11 বা অন্যান্য সি ++ রিলিজের কারণে সাম্প্রতিক পরিবর্তনের জন্য অ্যাবিআই পরিবর্তনগুলি (অ্যাপ্লিকেশন বাইনারি ইন্টারফেস) সম্পর্কে উদ্বিগ্ন। লাইব্রেরির সমস্যাগুলি এড়াতে চেষ্টা করার জন্য কেউ স্থিতিশীল (ডিস্কে বাইনারি আকারে ব্যাপকভাবে বৃদ্ধি করা) সংকলন করতে পারে, যদিও কিছু পুরানো বাইনারি এইটি করেছে কিনা তার উপর নির্ভর করে পুরাতন লিনাক্স ডিস্ট্রিবিউশন সর্বাধিক সবকিছুকে গতিশীল (রেডহ্যাট: হ্যাঁ) সংকলন করছে কিনা। অন্যদিকে, অন্যান্য লাইব্রেরিগুলি ব্যবহার করার জন্য বাইনারিগুলি patchelfডাইনামিক (ELF, তবে সম্ভবত a.outফর্ম্যাট নয় ) এর মতো জিনিসগুলি আবার নতুন করে তৈরি করতে পারে ।

যাহোক! একটি প্রোগ্রাম চালাতে সক্ষম হওয়াই একটি জিনিস এবং আসলে এটির সাথে অন্য কিছু উপকারী হওয়া। পুরানো 32-বিট ইন্টেল বাইনারিগুলিতে সুরক্ষা সমস্যা থাকতে পারে যদি তারা ওপেনএসএসএল এর কোনও সংস্করণের উপর নির্ভর করে যা এতে কিছু ভয়াবহ এবং নন-ব্যাকপোর্টেড সুরক্ষা সমস্যা রয়েছে বা প্রোগ্রামটি আধুনিক ওয়েব সার্ভারগুলির সাথে মোটেই আলোচনায় সক্ষম না হতে পারে (আধুনিক হিসাবে সার্ভারগুলি পুরানো প্রোগ্রামের পুরানো প্রোটোকল এবং সিফারগুলি প্রত্যাখ্যান করে), বা এসএসএইচ প্রোটোকল সংস্করণ 1 আর সমর্থিত নয়, বা ...


14
পুনরায় প্রথম অনুচ্ছেদ: না, ইন্টেল এটিকে "ইন্টেল 64" বলে ডাকে (এই দিনগুলিতে, এর আগে আরও কিছু নাম দিয়ে যাওয়ার পরে)। আইএ -৪৪ ইটানিয়ামকে বোঝায়, x86- সামঞ্জস্যপূর্ণ কিছু নয়।
হাবস

1
@ হোবস আপনাকে ধন্যবাদ, আমি সেই তথ্যগুলি amd64 এর সাথে প্রতিস্থাপন করেছি; আমি জিনিসগুলির নামকরণটি ইন্টেল বিপণন বিভাগে রেখে দেব।
ট্রিগার করুন

3
স্থির যোগসূত্রের কথা উল্লেখ করবেন না কেন?
19 20:20

2
এটি কেবলমাত্র লাইব্রেরি এবিআইগুলির পরিবর্তিত হয় না - কার্নেলের সিস্কেল ইন্টারফেসটি সময়ের সাথে সাথে প্রসারিত হয়। for GNU/Linux 2.6.32এর আউটপুটে (বা এ জাতীয়) নোট করুন file /usr/bin/ls
চার্লস ডফি

1
@ উইলবার্ট আপনি সম্ভবত অনুপস্থিত যে থ্রিগ রেড হ্যাট লিনাক্সের উল্লেখ করছেন যা রেড হ্যাট এন্টারপ্রাইজ লিনাক্স থেকে পৃথক ।
বব

68

সংক্ষেপে: আপনি যদি একই (বা একটি সামঞ্জস্যপূর্ণ) আর্কিটেকচার ব্যবহার করে কোনও হোস্ট থেকে অন্য হোস্টে একটি সংকলিত বাইনারি গ্রহণ করেন , তবে আপনি এটি অন্য বিতরণে নিয়ে যাওয়ার ক্ষেত্রে ঠিকঠাক হতে পারেন । তবে কোডের জটিলতা বাড়ার সাথে সাথে ইনস্টলড না থাকা লাইব্রেরির সাথে লিঙ্ক হওয়ার সম্ভাবনা রয়েছে; অন্য জায়গায় ইনস্টল করা; বা একটি ভিন্ন সংস্করণে ইনস্টল করা, বৃদ্ধি। উদাহরণস্বরূপ আপনার কোড গ্রহণ করা, যার জন্য lddনিম্নলিখিত gcc -o exit-test exit-test.c(ডিবিয়ান-উত্পন্ন) উবুন্টু লিনাক্স হোস্টে সংকলন করার সময় নিম্নলিখিত নির্ভরতাগুলি রিপোর্ট করে :

$ ldd exit-test
    linux-gate.so.1 =>  (0xb7748000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb757b000)
    /lib/ld-linux.so.2 (0x8005a000)

স্পষ্টতই এই বাইনারিটি আমি চালাচ্ছি না, বলুন, একটি ম্যাক ( ./exit-test: cannot execute binary file: Exec format error)। আসুন এটি একটি আরএইচইএল বাক্সে নিয়ে যাওয়ার চেষ্টা করুন:

$ ./exit-test
-bash: ./exit-test: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

ওহে প্রিয়। কেন হতে পারে?

$ ls /lib/ld-l* # reference the `ldd` output above
ls: cannot access /lib/ld-l*: No such file or directory

এমনকি এই ব্যবহারের ক্ষেত্রে, ভাগ করা লাইব্রেরিগুলি হারিয়ে যাওয়ার কারণে কাঁটাচামচ করা ব্যর্থ হয়েছে।

যাইহোক, আমি যদি এটি সংকলন করি gcc -static exit-test-static exit-test.c, লাইব্রেরিগুলি না করে সিস্টেমে পোর্ট করা ঠিক ঠিক কাজ করে। অবশ্যই ডিস্ক স্পেসের ব্যয়ে:

$ ls -l ./exit-test{,-static}
-rwxr-xr-x  1 username  groupname    7312 Jan 29 14:18 ./exit-test
-rwxr-xr-x  1 username  groupname  728228 Jan 29 14:27 ./exit-test-static

আর একটি কার্যকর সমাধান হ'ল নতুন হোস্টে প্রয়োজনীয় গ্রন্থাগারগুলি ইনস্টল করা।

ইউ অ্যান্ড এল মহাবিশ্বের অনেক কিছুর মতোই, এটি অনেকগুলি স্কিনযুক্ত একটি বিড়াল, যার মধ্যে দুটি উপরে বর্ণিত।


4
আসলে, আমি স্থির বাইনারি সম্পর্কে ভুলে গিয়েছিলাম। কিছু বিক্রেতারা স্থিত বাইনারি গ্রহণ করেন এবং কিছু ম্যালওয়্যার লেখকও একই আর্কিটেকচারের
রুই এফ রিবেইরো


2
@ মিমিবিস আমি মনে করি এর অর্থ একটি পরিবেশ (ডিস্ট্রো) থেকে অন্য পরিবেশে ডেটা (এক্সিকিউটেবল) অনুলিপি করা, যেখানে ডেটা গন্তব্য পরিবেশের জন্য ডিজাইন করা হয়নি।
wjandrea

13
দুর্ভাগ্যক্রমে আপনার লিনাক্স উদাহরণটি কৃত্রিম, এবং বিতরণের পরিবর্তে আর্কিটেকচার সম্পর্কে আপনার দৃষ্টিভঙ্গি তুলে ধরে: আপনি দেবিয়ানে একটি 32-বিট বাইনারি তৈরি করেছিলেন এবং এটি 64-বিট আরএইচইএল চালানোর চেষ্টা করেছিলেন; সেগুলি হ'ল বিভিন্ন আর্কিটেকচার ... খুব কম লাইব্রেরি নির্ভরতা সহ একই-আর্কিটেকচার বাইনারিগুলি ঠিক জরিমানা অনুলিপি করা যায়।
স্টিফেন কিট

7
@ এসএমএলটাররা আমি এটি অযৌক্তিক বলছি না, আমি বলছি এটি ডোপঘোটি যে পয়েন্টটি তৈরি করার চেষ্টা করছে সেই দৃষ্টিকোণীর কারণে এটি একটি খারাপ উদাহরণ (আপনি একটি বন্টন থেকে অন্য বিতরণে বাইনারিগুলি অনুলিপি করতে পারবেন না - যা ভুল)। অবশ্যই ইনটেলের 64৪-বিট লিনাক্স যথাযথ অবকাঠামো সহ 32-বিট এক্সিকিউটেবল চালানো সমর্থন করে। এই ক্ষেত্রে আইএমওর একটি বৈধ উদাহরণ হ'ল amd64বাইনারি তৈরি করা এবং এটি অন্য amd64বিতরণে চালানো, বা i386বাইনারি তৈরি করা এবং এটি অন্য i386বিতরণে চালানো।
স্টিফেন কিট

25

দুর্দান্ত @ থ্রিগ্র এবং @ ডপগোতি উত্তরগুলিতে যুক্ত করা: লিনাক্স সহ ইউনিক্স বা ইউনিক্স-এর মতো ওএসগুলি বাইনারিগুলির তুলনায় উত্স কোডের বহনযোগ্যতার জন্য alwaysতিহ্যগতভাবে সর্বদা ডিজাইন করা এবং সংযুক্ত করা হয়েছিল।

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

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


19

দ্বারা ডিফল্ট , আপনি প্রায় অবশ্যই বাহ্যিক লাইব্রেরি সঙ্গে সমস্যায় পরতে হবে। অন্যান্য উত্তরগুলির মধ্যে কয়েকটি সেই সমস্যাগুলি সম্পর্কে আরও বিশদে যায়, তাই আমি তাদের কাজটির সদৃশ করব না।

আপনি লিনাক্স সিস্টেমের মধ্যে বহনযোগ্য হতে পারে এমন অনেকগুলি প্রোগ্রাম - এমনকি তুচ্ছ-টি-তেও সংকলন করতে পারেন । কীটি হ'ল লিনাক্স স্ট্যান্ডার্ড বেস নামে টুলকিট । Lsb শুধু পোর্টেবল অ্যাপ্লিকেশন এই ধরনের তৈরি করার জন্য ডিজাইন করা হয়। এলএসবি ভি 5.0 এর জন্য একটি অ্যাপ্লিকেশন সংকলন করুন এবং এটি অন্য যে কোনও লিনাক্স পরিবেশে (একই আর্কিটেকচারের) চলবে যা এলএসবি ভি 5.0 প্রয়োগ করে। কয়েকটি লিনাক্স ডিস্ট্রো হ'ল এলএসবি অনুবর্তী, এবং অন্যগুলির মধ্যে একটি ইনস্টলযোগ্য প্যাকেজ হিসাবে এলএসবি টুলকিট / লাইব্রেরি অন্তর্ভুক্ত। আপনি যদি LSB সরঞ্জামগুলি ব্যবহার করে আপনার অ্যাপ্লিকেশন তৈরি করেন (যেমন lsbccমোড়কের জন্য gcc) এবং লাইব্রেরির LSB সংস্করণে লিঙ্ক করেন তবে আপনি একটি বহনযোগ্য অ্যাপ্লিকেশন তৈরি করবেন।


এবং qemuআপনি এমনকি বিভিন্ন আর্কিটেকচারের জন্য সংকলিত প্রোগ্রামগুলি চালাতে পারেন, (উচ্চ সম্পাদনা নয়, তবে আপনি সেগুলি চালাতে পারেন)
জেসেন

1
আমি লিনাক্স স্ট্যান্ডার্ড বেস টুলকিট সম্পর্কেও অবগত ছিলাম না, তাই আপনাকে ধন্যবাদ! আমি খুব দীর্ঘ সময় আগে সি / সি ++ এর সাথে কাজ শুরু করেছিলাম, এই উত্তরগুলিতে এত বেশি তথ্য আমার কাছে নতুন। এবং খুব সহায়ক।
জেসিদিন

1
উইকিপিডিয়া নিবন্ধে বলা হয়েছে যে দেবিয়ান এবং উবুন্টু এলএসবি বাস্তবায়ন করে না (এবং এটি করার কোনও ইচ্ছা নেই)
ব্ল্যাকজ্যাক

2
@ ব্ল্যাকজ্যাক- ডিস্ট্রো নিজেই এটির 100% মূল ওএসের অংশ হিসাবে প্রয়োগ করে না, তবে আপনি এলএসবি-সামঞ্জস্যের লাইব্রেরি এবং টুলকিটগুলি alচ্ছিক প্যাকেজ হিসাবে ইনস্টল করতে পারেন। আমি উবুন্টু (উদাহরণস্বরূপ) এলএসবি-সামঞ্জস্যপূর্ণ প্রোগ্রামগুলি তৈরি করতে ব্যবহার করেছি যা তখন সুস এবং সেন্টোতে চালিত হয়, আপনাকে কেবল apt-get installকয়েকটি প্যাকেজ দরকার।
বিটিএ

10

হতে পারে.

যে বিষয়গুলিতে এটি ভাঙতে থাকে সেগুলির মধ্যে রয়েছে।

  1. বিভিন্ন স্থাপত্য। স্পষ্টতই সম্পূর্ণ ভিন্ন আর্কিটেকচারগুলি কাজ করবে না (যদি আপনি বিনফএমটি_মিস্কের সাথে ব্যবহারকারী মোড কিমুর মতো কিছু না করেন তবে এটি একটি সাধারণ কনফিগারেশন নয়)। x86 বাইনারিগুলি amd64 এ কাজ করতে পারে তবে কেবলমাত্র প্রয়োজনীয় 32-বিট লাইব্রেরি উপলব্ধ।
  2. গ্রন্থাগার সংস্করণ। যদি সোভারসনটি ভুল হয় তবে এটি লাইব্রেরিটি মোটেই খুঁজে পাবে না। যদি সোভারসনটি একই হয় তবে বাইনারিটি লাইব্রেরির নতুন সংস্করণের বিপরীতে নির্মিত তবে এটি নতুন চিহ্ন বা চিহ্নগুলির নতুন সংস্করণের কারণে লোড করতে ব্যর্থ হতে পারে। বিশেষত গ্লিবিসি প্রতীক সংস্করণের ভারী ব্যবহারকারী, সুতরাং নতুন গ্লিবকের বিপরীতে নির্মিত বাইনারিগুলি পুরানো গ্লিবিকের সাথে ব্যর্থ হওয়ার সম্ভাবনা রয়েছে।

আপনি যদি কোনও দ্রুত-পরিবর্তনশীল লাইব্রেরি ব্যবহার করা এড়িয়ে যান তবে আর্কিটেকচারের পরিবর্তনগুলি এড়িয়ে চলুন এবং আপনি যে টার্গেট করতে চান সেই প্রাচীনতম ডিস্ট্রো তৈরি করুন আপনার অনেকগুলি ডিস্ট্রোজে একটি বাইনারি কাজ করার ভাল সুযোগ রয়েছে।


4

পূর্বে উল্লিখিত কিছু বিষয় ছাড়াও এক্সিকিউটেবল ফাইল ফরম্যাটে কিছু পরিবর্তন হয়েছে। বেশিরভাগ ক্ষেত্রে, লিনাক্স ELF ব্যবহার করে তবে পুরানো সংস্করণগুলি a.out বা COFF ব্যবহার করে।

একটি উইকিহোল শুরু:

https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats

নতুন ফর্ম্যাটগুলি চালানোর জন্য পুরানো সংস্করণগুলি পাওয়ার কোনও উপায় থাকতে পারে তবে আমি ব্যক্তিগতভাবে কখনও এটিকে দেখিনি।


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