এই উত্তরটির পূর্ববর্তী সংস্করণ (রেক্সটেসটার ডট কমের জন্য "হ্যাক") বেশিরভাগই এখন অপ্রয়োজনীয় যে http://gcc.godbolt.org/ এআরএম, x86, এবং x86-64 (উইন্ডোজ কলিং কনভেনশনকে লক্ষ্য করে সিএল 19 আরসি সরবরাহ করে) , সেই সাইটে জিসিসি, ঝনঝন, এবং আইসিসির বিপরীতে)।
গডবোল্ট সংকলক এক্সপ্লোরার নির্দেশের "গোলমাল" মুছে ফেলার জন্য কম্পাইলার এসএম আউটপুটকে সুন্দরভাবে ফর্ম্যাট করার জন্য ডিজাইন করা হয়েছে, তাই আমি আর্গুমেন্ট গ্রহণকারী কোনও ফাংশনগুলির জন্য asm সন্ধান করার জন্য এটি ব্যবহার করার সুপারিশ করব (যাতে তারা হবে না অপ্টিমাইজড দূরে)।
কিছু সময়ের জন্য, সিএল http://gcc.beta.godbolt.org/ এ উপলব্ধ ছিল তবে মূল সাইটটি নয়, এখন এটি উভয় ক্ষেত্রেই রয়েছে।
Http://rextester.com/l/cpp_online_compiler_visual অনলাইন সংকলক থেকে এমএসভিসি asm আউটপুট পেতে : /FAs
কমান্ড লাইন বিকল্পগুলিতে যুক্ত করুন। আপনার প্রোগ্রামটির নিজস্ব পথ খুঁজে বের করুন এবং এর পথে কাজ করার চেষ্টা করুন .asm
এবং এটিকে ফেলে দিন। অথবা এটির উপর একটি বিযুক্তি চালান .exe
।
যেমন http://rextester.com/OKI40941
#include <string>
#include <boost/filesystem.hpp>
#include <Windows.h>
using namespace std;
static string my_exe(void){
char buf[MAX_PATH];
DWORD tmp = GetModuleFileNameA( NULL, // self
buf, MAX_PATH);
return buf;
}
int main() {
string dircmd = "dir ";
boost::filesystem::path p( my_exe() );
//boost::filesystem::path dir = p.parent_path();
// transform c:\foo\bar\1234\a.exe
// into c:\foo\bar\1234\1234.asm
p.remove_filename();
system ( (dircmd + p.string()).c_str() );
auto subdir = p.end(); // pointing at one-past the end
subdir--; // pointing at the last directory name
p /= *subdir; // append the last dir name as a filename
p.replace_extension(".asm");
system ( (string("type ") + p.string()).c_str() );
// std::cout << "Hello, world!\n";
}
... code of functions you want to see the asm for goes here ...
type
এর ডস সংস্করণ cat
। আমি এমন আরও কোড অন্তর্ভুক্ত করতে চাইনি যা আমার পক্ষে asm দেখতে চেয়েছিল এমন ফাংশনগুলি সন্ধান করা আরও কঠিন করে তুলবে। (এসটিডি :: এই লক্ষ্যে স্ট্রিং এবং বুস্ট রান কাউন্টার ব্যবহার যদিও! কিছু সি-শৈলী স্ট্রিং ম্যানিপুলেশন স্ট্রিং প্রক্রিয়াকরণের (এবং সম্পর্কে আরো অনুমানের তোলে ফলে বড় বাফার ব্যবহার করে) দ্বারা সর্বোচ্চ দৈর্ঘ্যের নিরাপত্তা / বরাদ্দ উপেক্ষা করে GetModuleFileNameA
হায় মোট কম মেশিন কোড হতে হবে।)
আইডিকে কেন, তবে cout << p.string() << endl
কেবলমাত্র বেসনাম (উদাহরণস্বরূপ ফাইল নাম, ডিরেক্টরিগুলি ছাড়াই) প্রদর্শন করা হয়, যদিও এর দৈর্ঘ্য মুদ্রণটি দেখায় যে এটি কেবল খালি নাম নয়। (উবুন্টু 15.10 এ ক্রোমিয়াম 48)। cout
প্রোগ্রামের স্টাডআউট এবং ওয়েব ব্রাউজারের মধ্যে কোনও এক সময় সম্ভবত কিছু ব্যাকস্ল্যাশ-এস্কেপ প্রক্রিয়াজাতকরণ রয়েছে ।