এক্সিকিউটেবলকে সি উত্স কোডে ফিরে রূপান্তর করুন


14

দুর্ভাগ্যক্রমে আমি আমার উত্স কোডটি হারিয়েছি এবং আমার কেবলমাত্র আউটপুট ফাইল রয়েছে যা লিনাক্সে জিসিসি দিয়ে তৈরি হয়েছিল এবং আমার পিসিতে এখনই কোনও অ্যাক্সেস নেই isআউটপুট ফাইলকে উত্স ফাইলটিতে রূপান্তর করার কোনও উপায় আছে (লিনাক্সের নীচে সিতে)?


আপনি যা চান তাকে ডিকম্পাইলার বলা হয়। আপনি এই উত্তরটির জন্য কিছুটা সহায়তা পেতে পারেন: stackoverflow.com/questions/193896/whats-a-good-c-decompiler
এরিক রেনৌফ

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

@ fpmurphy1 আপনি হপার পেয়েছেন, যা আইডিএ প্রো এর সাথে মানের তুলনাযোগ্য এবং কোন লাইসেন্স মূল্যের একটি ভগ্নাংশ।
রুই এফ রিবেইরো

@ fpmurphy1 আমি এখনও অ্যাভাস্ট দ্বারা উত্পাদিত কোডের গুণমানটি পরিচালনা করতে সক্ষম হইনি ... যারা ইন্টেল 32-বিট প্ল্যাটফর্মগুলি আর ব্যবহার করে? তাছাড়া আমি এখন কয়েক দশক ধরে উইনটেল ব্যবহার করিনি। দেখুন unix.stackexchange.com/questions/418354/… দামের পার্থক্যটি বেশ তাৎপর্যপূর্ণ তবে, হেক্স-রে / আইডিএ প্রো 500000 ইউএসডি বা এএফআইএকের মতো বাণিজ্যিক লাইসেন্সের জন্য কিছু চাঁদাবাজ মানগুলিতে ব্যক্তিগত লাইসেন্সের জন্য 1500 ইউএসডি থেকে শুরু করে, হপারটি 100 ইউএসডি একক ব্যবহারকারীর জন্য এবং একক কম্পিউটারের জন্য ১৩০
রুই এফ রিবেইরো

@RuiFRibeiro। প্রচুর ম্যালওয়্যার যা আমি পরীক্ষা করে দেখি তা এখনও 32-বিট।
এফএমপুরফি 4

উত্তর:


25

সুতরাং আপনার একটি গাভী ছিল, কিন্তু আপনি অজান্তেই এটি হ্যামবার্গারে রূপান্তরিত করেছেন এবং এখন আপনি আপনার গরুটি ফিরে চান।

দুঃখিত, এটি ঠিক সেভাবে কাজ করে না।

কেবলমাত্র আপনার ব্যাকআপগুলি থেকে উত্স ফাইলটি পুনরুদ্ধার করুন।

আহ, আপনার ব্যাকআপ নেই। দুর্ভাগ্যক্রমে, মহাবিশ্ব আপনাকে এর জন্য বিরতি দেয় না।

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

আমি কিছু প্রোগ্রাম ডিকম্পাইল করতে বুমেরাং ব্যবহার করেছি এবং ফলাফলটি মেশিন কোডের চেয়ে বেশি পঠনযোগ্য। আমি জানি না যে এটি সেখানে সবচেয়ে ভাল সরঞ্জাম। যাইহোক, অলৌকিক ঘটনা আশা করবেন না।


1
বুমেরাং বরং ঝরঝরে দেখাচ্ছে; ডকুমেন্টেশন রেফারেন্স gcc -O4 লজ্জা যেহেতু স্মৃতি আমাকে সঠিকভাবে পরিবেশন করে যদি এটি একেবারে কিছুই করে না (-O3 এর বাইরে)। আপনার প্রথম বাক্যটি অবশ্যই আপনার প্রথম পাঁচটি বাক্য হিসাবে অত্যন্ত কার্যকর। এটি নিয়মিতভাবে ব্যাক আপ করার গুরুত্ব সম্পর্কে আপনি একটি দৃ strong় বক্তব্য তৈরি করার কারণে বাকিটি এতটা বৈধ নয় বলে মনে হয় না। +1
প্রাইফটান

6

বিপরীত প্রকৌশলে একটি এক্সিকিউটেবলের বেশ কয়েকটি সরঞ্জাম সাধারণ।

  1. কমান্ড "ফাইল" যা ফাইলের প্রথম পরামিতি হিসাবে নেয় তাই আপনি নির্ধারণ করতে পারবেন (বেশিরভাগ ক্ষেত্রে) আপনার কী ধরণের এক্সিকিউটেবল রয়েছে।
  2. ডিসেসেমব্লাররা যা কার্যকরভাবে কী সম্পাদন করে তা যা সঠিকভাবে দেখায় কিন্তু যারা নির্দিষ্ট আর্কিটেকচারে অ্যাসেম্বলি কোডটি লেখেন না বা বিচ্ছিন্নতার অভিজ্ঞতা আছে তাদের পক্ষে পড়া কঠিন।
  3. বুমেরাং, হেক্স-রে এবং স্নোম্যানের মতো ডিকম্পিলারগুলি আরও কিছু বেশি পাঠযোগ্যতা সরবরাহ করতে পারে তবে তারা আসল প্রোগ্রামের প্রকৃত পরিবর্তনশীল নামগুলি বা সিনট্যাক্স পুনরুদ্ধার করে না এবং তারা 100% নির্ভরযোগ্য নয়, বিশেষত এমন ক্ষেত্রে যেখানে প্রকৌশলীরা পরীক্ষামূলকভাবে পরীক্ষামূলকভাবে তৈরি করেছিলেন এই প্যাকেজগুলি এবং সুরক্ষাটি আরও বিস্মৃত করার চেষ্টা করেছিল।
  4. ডেটা ফ্লো ডায়াগ্রাম বা সারণী। এটি স্বয়ংক্রিয়ভাবে করার জন্য আমি কোনও মুক্ত সরঞ্জামের কথা জানি না, তবে সমাবেশের আউটপুট (যা সেড বা পার্লে লেখা যেতে পারে) এর উপরে একটি পাইথন বা বাশ স্ক্রিপ্ট সাহায্য করতে পারে be
  5. পেন্সিল এবং কাগজ, জট প্রবাহ এবং ধারণার জন্য এটি বিশ্বাস করুন বা না করুন not

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


1
# 1: সত্য যদিও এর এর ত্রুটি রয়েছে। # 3: আমার ধারণা এগুলি কি বাণিজ্যিক? আমি একাডেমিকভাবে কেবল কৌতূহলী (আমার কাছে রিডানড্যান্ট ব্যাকআপ রয়েছে তাই সেই ধরণের জিনিসটির প্রয়োজন নেই)। # 4: প্রবাহ (যদিও এটি উত্সটি ব্যবহার করে এমন কিছু রয়েছে যারা বাইনারি নিয়ে কাজ করে - কিছুটা সতর্কতার সাথে) মনে আসে। আপনার পরে কী আছে তার উপর নির্ভর করে সেখানে আরও কিছু রয়েছে। গ্রাফিকাল আউটপুট হিসাবে আমি সেখানে সাহায্য করতে পারি না কারণ আমি পছন্দ করি না বা thing ধরণের জিনিসটির জন্য গ্রাফিকাল আউটপুট প্রয়োজন হয় না (আসলে আমি এটি আরও বিভ্রান্তিকর খুঁজে পাই)। # 5: খুব সত্য। আপনি অবশ্যই এখানে একটি পাঠ্য ফাইল ব্যবহার করতে পারেন।
প্রাইফটান

3

আপনি যা করতে চান তাকে "ডেকম্পলিং" বলা হয়। সেখানে অনেকগুলি ডিসকোপিলার রয়েছে এবং সেগুলি এখানে toেকে রাখা ব্যবহারিক নয়।

তবে সাধারণ মন্তব্য হিসাবে: সি উত্স থেকে এক্সিকিউটেবল মেশিন কোডে রূপান্তরটি ক্ষয়ক্ষতিজনক। এই ক্ষেত্রে:

  • মন্তব্যগুলি অপরিবর্তনীয়ভাবে হারিয়ে গেছে
  • পরিবর্তনশীল নামগুলি চলে গেছে
  • কখনও কখনও লুপগুলি পারফরম্যান্সের জন্য নিবন্ধভুক্ত হয়
  • ফাংশনগুলি পুনরায় সাজানো যেতে পারে

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


মন্তব্যগুলির বিষয়ে আমি সম্প্রতি লক্ষ্য করেছি এমন কিছু - এবং আমার কোনও ধারণা নেই যে এটি মন্তব্যগুলি কোনও ডিসকম্পেলার দ্বারা পড়তে দেয় এবং আমি ডিসকম্পেলারগুলি এই ধরণের জিনিসটির সন্ধান করারও আশা করি না - এটি: -সি মন্তব্যগুলি বাতিল করবেন না। প্রক্রিয়াজাত নির্দেশিকাগুলির মন্তব্য ব্যতীত সমস্ত মন্তব্য আউটপুট ফাইলে পৌঁছে যায়, যা নির্দেশের সাথে মুছে ফেলা হয়। এটি পার্শ্ব-প্রতিক্রিয়াগুলির পাশাপাশি-সিসি বিকল্পেরও হাইলাইট করে (এটি সিসিপি পরিবর্তে সম্ভবত সিসিপি হলেও)। আমি এটি ওপিতে প্রয়োগ করার আশা করি না তবে কারও কারও আগ্রহের বিষয় হতে পারে।
প্রাইফটান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.