আমি একটি সি ++ প্রোগ্রামের জন্য সমাবেশ কোডটি কীভাবে দেখতে পারি?


133

আমি একটি সি ++ প্রোগ্রামের জন্য সমাবেশ কোডটি কীভাবে দেখতে পারি?

এটি করার জন্য জনপ্রিয় সরঞ্জামগুলি কী কী?


মাইক্রোসফ্ট ভিজ্যুয়াল সি ++ এক্সপ্রেস সবেমাত্র একটি ব্রেকপয়েন্ট সেট করে প্রেস করুনAlt +8
jyz

সম্ভাব্য সদৃশ: stackoverflow.com/questions/137038/...
legends2k

উত্তর:


167

সংকলক জিজ্ঞাসা করুন

আপনি যদি প্রোগ্রামটি নিজেই তৈরি করছেন, আপনি আপনার সংকলককে সমাবেশ উত্স নির্গমন করতে বলতে পারেন। বেশিরভাগ ইউনিক্স সংকলকগুলির জন্য -Sস্যুইচটি ব্যবহার করুন ।

  • আপনি যদি জিএনইউ এসেম্ববলার ব্যবহার করে থাকেন তবে -g -Wa,-alhসংকলনটি স্টিডআউটে আন্তঃসংযোগ উত্স এবং সমাবেশ দেবে ( -Waসংকলক ড্রাইভারকে এসেম্বলারের বিকল্পগুলি পাস করতে বলে, -alসমাবেশ তালিকা চালু করে এবং -ah"উচ্চ-স্তরের উত্স" তালিকা যুক্ত করে):

    g++ -g -c -Wa,-alh foo.cc

  • ভিজ্যুয়াল স্টুডিওর জন্য, ব্যবহার করুন /FAsc

বাইনারি মধ্যে উঁকি

আপনি যদি বাইনারি সংকলন করেন,

  • objdump -d a.outইউনিক্সে ব্যবহার করুন (এছাড়াও সাইগউইনের জন্যও কাজ করে),
  • dumpbin /DISASM foo.exe উইন্ডোজে

আপনার ডিবাগারটি ব্যবহার করুন

ডিবাগারগুলি বিচ্ছিন্নভাবে প্রদর্শন করতে পারে।


35

জিসিসি / জি ++ এ, সংকলন করুন -S। যে something.sসমাবেশ কোড সহ একটি ফাইল আউটপুট হবে ।

সম্পাদনা: আপনি যদি আউটপুটটি ইন্টেল সিনট্যাক্সে থাকতে চান (যা আইএমও, আরও বেশি পাঠযোগ্য এবং বেশিরভাগ সমাবেশ টিউটোরিয়াল এটি ব্যবহার করে) দিয়ে সংকলন করুন -masm=intel


5
এছাড়াও -fverbose-asmবিকল্পটি যুক্ত করুন
osgx

23

ভিজ্যুয়াল স্টুডিওতে ;

  1. একটি ব্রেকপয়েন্ট সেট করুন
  2. প্রোগ্রামটি ব্রেকপয়েন্টে না থামানো পর্যন্ত চালান
  3. সোর্সকোডে রাইট ক্লিক করুন এবং "বিচ্ছিন্নভাবে দেখান" বাছুন

14

জিসিসি / জি ++ এর জন্য

gcc -save-temps -fverbose-asm prog.c

এটি প্রতিটি এসএম লাইনে ব্যবহৃত ভেরিয়েবলের উপর কিছু মন্তব্য সহ প্রগ্রেস তৈরি করবে:

    movl    $42, -24(%ebp)  #, readme
    movl    -16(%ebp), %eax # pid, pid
    movl    %eax, 4(%esp)   # pid,
    movl    $.LC0, (%esp)   #,
    call    printf  #


6

প্রচুর লোক ইতিমধ্যে জানিয়েছে কীভাবে প্রদত্ত সংকলক সহ এসেম্বলি কোড নির্গত করতে হয় mit আরেকটি সমাধান একটি বস্তু ফাইল কম্পাইল এবং একটি হাতিয়ার যেমন সঙ্গে এটি ডাম্প হয় objdump , readelf (ইউনিক্স দিকে) অথবা DUMPBIN ( লিংক ) (Windows এ)। আপনি এক্সিকিউটেবলকেও ডাম্প করতে পারেন তবে আউটপুটটি পড়া আরও কঠিন হবে।

যে কোনও সংকলক দিয়ে একইভাবে কাজ করার সুবিধা রয়েছে।


6

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


5

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

ইউনিক্স / লিনাক্স প্ল্যাটফর্মগুলিতে (সাইগউইন সহ) আপনি ব্যবহার করতে পারেন objdump --disassemble <executable>


সংকলকটি যদি এসেম্বলারের উত্পন্ন করার জন্য কোনও বিকল্প থাকে (যেমন জিসিসি-এস, বা নীচে ভিএস / এফএ বিকল্প), তবে এটি বিচ্ছিন্নতার চেয়ে পছন্দসই। এটি আরও প্রতীকী।
মার্কো ভ্যান ডি ভুর্ট

অবশ্যই, যদি আপনার উত্স থাকে।
ওরি পেছাচ

2
যাইহোক, আপনি বিস্মিত হবেন যে কত প্রতীক তথ্য আইডিএ প্রো দ্বারা নির্ধারণ করা যেতে পারে।
ওরি পেছাচ

5

বেশিরভাগ সংকলকের কাছে একটি সমাবেশ তালিকা আউটপুট করার বিকল্প রয়েছে। উদাহরণস্বরূপ ভিজ্যুয়াল স্টুডিও সহ আপনি এমন কিছু ব্যবহার করতে পারেন:

cl.exe /FAfile.asm file.c

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



3

আপনি এই সাইটটিও চেষ্টা করতে পারেন: http://assembly.ynh.io/

সেখানে, আপনি আপনার সি বা সি ++ কোড পেস্ট করতে পারেন এবং সমাবেশের সমতুল্য সংস্করণটি দেখতে একটি নীল বোতাম টিপুন।


এফওয়াইআই, লোড করতে ব্যর্থ
কাওয়ান

হ্যাঁ, ২০১৫ সালে ফিরে এটি ঠিকঠাক কাজ করেছিল, তখন হঠাৎ এটি বন্ধ হয়ে যায়। তারপরে এসেছিল ctoasorses.com, তবে এটি সি এর কেবলমাত্র একটি ছোট উপসেটের জন্য কাজ করেছিল happ একই হ্যাভেনড: আর লোড হচ্ছে না। খুব খারাপ.
গোমেস জে

2

ভিজ্যুয়াল স্টুডিওতে আপনি সি ++ প্রকল্পের জন্য এসেম্বলারের তালিকা তৈরি করতে পারেন।

প্রকল্পের বৈশিষ্ট্যগুলিতে যান, তারপরে সি ++ / আউটপুট ফাইলগুলিতে যান এবং অ্যাসেমব্লার আউটপুট সেটিংস এবং এএসএম তালিকার অবস্থানটি কোনও ফাইলের নামে সেট করুন।


1

একটি ইন্টেল ম্যাক ওএস এক্স 10.8 (মাউন্টেন সিংহ) এ -masm=intelনির্দেশিকাটি কার্যকর হয়নি। যাইহোক, যদি আপনি আছে যদি Xcode ইনস্টল এটি 'otool' নামক টুল ইনস্টল করা আছে উচিত:

otool code.o -tV

আপনাকে প্যারামিটার হিসাবে সংকলিত অবজেক্ট কোড সরবরাহ করতে হবে।


0

আপনি যদি একটি Elpipse ব্যবহারকারী হন তবে আপনি ডিসেএসপ্লেউ ভিউটি ব্যবহার করতে পারেন ।

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

  • যে কোনও এসেম্বলারের নির্দেশের শুরুতে ব্রেকপয়েন্টগুলি সেট করুন
  • ব্রেকপয়েন্টগুলি সক্ষম করুন এবং অক্ষম করুন এবং তাদের বৈশিষ্ট্যগুলি সেট করুন
  • আপনার প্রোগ্রামের অপ্রয়োজনীয় নির্দেশাবলী পদক্ষেপ
  • প্রোগ্রামে নির্দিষ্ট নির্দেশাবলী যান

আপনি কিছুটা ব্যাখ্যা করতে পারেন?
পিটার মর্টেনসেন

এমএসভিসি
ফুকলিভ

আমার এখনই কার্যক্ষম Eclipse C ++ বিকাশের পরিবেশ নেই, তবে এখানে সরকারী ডকুমেন্টেশন রয়েছে: help.eclipse.org/kepler/…
পিটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.