শেখা সমাবেশ [বন্ধ]


102

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

আমি উইন্ডোজ ব্যবহার করছি (যদি এটি কোনও পার্থক্য করে)।

সম্পাদনা: সুতরাং, সবাই এমএএসএমের দিকে ইঙ্গিত করছে বলে মনে হচ্ছে। যদিও আমি পয়েন্টটি পেয়েছি যে এটির উচ্চ স্তরের দক্ষতা রয়েছে, এসেম্বলি কোড প্রোগ্রামারটির পক্ষে সব ভাল, এটি আমি খুঁজছি না। মনে হয়, জনপ্রিয় ডেসেমব্লার্সগুলিতে (আইডিএর মতো) প্রদর্শিত না হলে, অনুরোধ করা ইত্যাদি নির্দেশাবলী রয়েছে। তাই আমি যদি সম্ভব হয় তা শুনতে চাই তবে আমি যে উদ্দেশ্যে জিজ্ঞাসা করছি (ASA- র ডিসেম্বল্ডেড এক্সের কোডটি আইডিএতে পড়ছি), কেবল "সাধারণ" অ্যাসেম্বলি প্রোগ্রামারদের নয় এমন কারও মতামত।

সম্পাদনা: ঠিক আছে। আমি ইতিমধ্যে সমাবেশ শিখছি। আমি এমএএসএম শিখছি, উচ্চ স্তরের জিনিসগুলি ব্যবহার করি না যা আমার পক্ষে গুরুত্বপূর্ণ নয়। আমি এখনই যা করছি তা আমার কোডটি সি ++ এর মধ্যে __asm ​​এর নির্দেশিকায় চেষ্টা করে দেখছে, তাই এমএএসএম দিয়ে স্ক্র্যাচ থেকে আমাকে সবকিছু করতে হবে কিনা তার চেয়ে আমি দ্রুত জিনিসগুলি চেষ্টা করতে পারি।


অনুরূপ প্রশ্ন stackoverflow.com/questions/1355524/...
TrueWill

হ্যাঁ, আমিও এটি পড়ছিলাম। তবে আমার প্রশ্নটি আরও কিছুটা "ফোকাসড", আমি বলব।
1:০৯

আপনি যদি উইন্ডোতে লক্ষ্য হন (এটি প্রসেসর এবং তাই নির্দেশিকা সেট) x86 বা x86-64। আপনি যদি অন্য কোনও মেশিন বা এমসিইউ বোর্ড না পান বা একটি এমুলেটর ব্যবহার না করেন। সুতরাং, প্রশ্নটি কোন এসেম্বলারের ব্যবহার করা উচিত? বা আপনি কি সত্যিই জিজ্ঞাসা করছেন কোন আর্কিটেকচারকে টার্গেট করতে? ব্যক্তিগতভাবে আমি m68k সিরিজের চিপস, হায়রে, অ্যালাকের উপর সেট করা সুন্দর অরথোগোনাল নির্দেশ পছন্দ করি।
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

2
"মনে হয়, যদি অনুরোধ করা, ইত্যাদি নির্দেশাবলী থাকে" - এগুলি ম্যাক্রো ("এমএএসএম" এর 'এম') এবং এসেমব্লার সমর্থন করলেও আপনাকে সেগুলি ব্যবহার করতে হবে না।
ক্রিসডাব্লু

3
প্রশ্নটিকে th৫ তম উর্ধ্বতন দেওয়া একটি কঠিন সিদ্ধান্ত ছিল, such৪ এত সুন্দর একটি সংখ্যা। । ।
735 টেসলা

উত্তর:


40

এমএএসএম 32 দিয়ে শুরু করুন এবং সেখান থেকে এফএএসএম দেখুন । তবে আপনি এমএএসএম দিয়ে মজা পাবেন।


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

1
এটি মূলত ওপ কোডগুলি লেখার মতো হবে, যা সত্যিকার অর্থে বোঝায় না। এমএএসএম 32 শেখা আপনাকে বুঝতে সাহায্য করবে যে কোনও ডিবাগারে কোড কীভাবে দেখায়। আপনি অলিডিবিজিও দেখতে চান
দুপুর সিল্ক

7
আপনি সমাবেশ বুঝতে পারবেন না। আপনার এটি বুঝতে হবে। একটি অপকোড একটি সংখ্যা। ডিবাগারগুলি তাদের নির্দেশাবলীতে (কখনও কখনও এটি কঠিন) ওপকডগুলি সমাধান করার চেষ্টা করবে। আপনার প্রাথমিক নির্দেশাবলী বুঝতে হবে। এমএএসএম শেখা আপনাকে এটি করতে সহায়তা করবে। আর বলার দরকার নেই।
দুপুর সিল্ক

5
আপনাকে এমএএসএম বৈশিষ্ট্যগুলি কেবল সেখানে থাকার কারণে ব্যবহার করতে হবে না; আপনি চাইলে জিনিসগুলি পড়া যেমন শক্ত করে তুলতে পারেন, আপনি যদি ভাবেন যে আপনি আরও সেভাবে শিখবেন।
জেসনট্রু

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

44

আমি এটি বহুবার করেছি এবং এটি চালিয়ে যেতেছি। এক্ষেত্রে যেখানে আপনার প্রাথমিক লক্ষ্যটি পাঠাচ্ছে এবং এসেম্বলার লিখছে না তা আমার মনে হয় এটি প্রযোজ্য।

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

1) নির্দিষ্ট প্রসেসরের জন্য নির্দেশ সেট শিখুন

২) কীভাবে প্রসেসরের জন্য কোডটি কীভাবে লিখতে হবে তার সুনির্দিষ্ট বিষয়গুলি শিখুন যেমন আপনি প্রতিটি নির্দেশিকায় প্রতিটি অপকোড বিটটি উইল করতে পারেন

3) আপনি নির্দেশটি সেটটি আরও ভাল শিখেন যে বেশিরভাগ প্রকৌশলী যারা সেই নির্দেশিকাটি তাদের জীবিকা নির্বাহের জন্য ব্যবহার করেন set

আপনার ক্ষেত্রে বেশ কয়েকটি সমস্যা রয়েছে, আমি সাধারণত এআরএম নির্দেশটি শুরু করার পরামর্শ দিই, অন্য যে কোনও আর্ম (বেসিকৃত x86 কম্পিউটার) এর চেয়ে আজ আরও বেশি আর্ম ভিত্তিক পণ্য প্রেরণ করা হয়েছে। তবে সম্ভবত আপনি এখন আরএম ব্যবহার করছেন এবং এআরএম জেনে স্টার্টআপ কোড বা অন্যান্য রুটিনগুলি লিখতে এটির পক্ষে পর্যাপ্ত সমাবেশকারী জানেন না যে আপনি যা করার চেষ্টা করছেন তা সাহায্য করতে পারে বা নাও পারে। এআরএমের দ্বিতীয় এবং আরও গুরুত্বপূর্ণ কারণ হ'ল নির্দেশের দৈর্ঘ্য নির্দিষ্ট আকার এবং প্রান্তিককরণ। X86 এর মতো পরিবর্তনশীল দৈর্ঘ্যের নির্দেশাবলীকে ছত্রভঙ্গ করা আপনার প্রথম প্রকল্প হিসাবে দুঃস্বপ্ন হতে পারে এবং এখানে লক্ষ্য লক্ষ্য হল গবেষণা প্রকল্প তৈরি না করে নির্দেশ সেটটি শিখানো। তৃতীয় এআরএম একটি সম্পন্ন নির্দেশিকা সেট, নিবন্ধগুলি সমানভাবে তৈরি করা হয় এবং স্বতন্ত্র বিশেষ সুনির্দিষ্টতা রাখে না।

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

ওহ চলক দৈর্ঘ্যের নির্দেশাবলী বিচ্ছিন্ন করার জন্য, কেবল শুরু থেকে শুরু করার পরিবর্তে এবং মেমরির মাধ্যমে প্রতি চার বাইট রৈখিকভাবে বিচ্ছিন্ন করার মতো আপনি এআরএম বা এমএসপি ৪৩০ এর মতো প্রতি দুটি বাইটের সাথে (এমএসপি ৪৩০ পরিবর্তনশীল দৈর্ঘ্যের নির্দেশাবলী রয়েছে তবে আপনি এখনও পেতে পারেন) আপনি যদি বাধা ভেক্টর টেবিল থেকে প্রবেশের পয়েন্টগুলিতে শুরু করেন তবে মেমরির মধ্য দিয়ে রৈখিকভাবে যাচ্ছেন)। ভেরিয়েবলের দৈর্ঘ্যের জন্য আপনি কোনও ভেক্টর টেবিলের ভিত্তিতে একটি এন্ট্রি পয়েন্ট বা প্রসেসর কীভাবে বুট করবেন এবং এক্সিকিউশন ক্রমে কোডটি অনুসরণ করবেন সে সম্পর্কে জ্ঞানের ভিত্তিতে সন্ধান করতে চান। কতগুলি বাইট ব্যবহার করা হয় তা জানতে আপনাকে প্রতিটি নির্দেশকে পুরোপুরি ডিকোড করতে হবে যদি নির্দেশটি কোনও শর্তহীন শাখা না হয় তবে সেই নির্দেশের পরে পরবর্তী বাইট ধরে নেওয়া অন্য নির্দেশনা ruction আপনাকে সমস্ত সম্ভাব্য শাখার ঠিকানাও সংরক্ষণ করতে হবে এবং আরও নির্দেশাবলীর জন্য সেগুলি বাইট অ্যাড্রেসগুলি ধরে নেওয়া উচিত। একবার আমি সফল হয়েছি বাইনারি মাধ্যমে বেশ কয়েকটি পাস। এন্ট্রি পয়েন্ট থেকে শুরু করে আমি সেই বাইটটিকে কোনও নির্দেশনার সূচনা হিসাবে চিহ্নিত করেছি তারপর শর্তহীন শাখায় আঘাত না করা পর্যন্ত মেমরির মধ্য দিয়ে রৈখিকভাবে ডিকোড করেছিলাম। সমস্ত শাখার লক্ষ্যগুলি একটি নির্দেশিকার সূচনা ঠিকানা হিসাবে ট্যাগ করা হয়েছিল। আমি কোনও নতুন শাখার টার্গেট না পাওয়া পর্যন্ত বাইনারি দিয়ে একাধিক পাস করেছি। যদি কোনও সময়ে আপনি একটি 3 বাইট নির্দেশ বলে মনে করেন তবে কোনও কারণে আপনি দ্বিতীয় বাইটটিকে কোনও নির্দেশের সূচনা হিসাবে ট্যাগ করেছেন আপনার সমস্যা আছে। কোডটি যদি উচ্চ স্তরের সংকলক দ্বারা উত্পাদিত হয় তবে কম্পাইলার যদি কিছু খারাপ করে না, তবে এটি হওয়া উচিত নয়, কোডটিতে হাতে লেখা এসেমব্লার থাকলে (যেমন একটি পুরানো তোরণ খেলা বলুন) এটি যথেষ্ট সম্ভব যে শর্তসাপেক্ষ শাখাগুলি কখনই r0 = 0 এর মতো ঘটবে না তারপরে শূন্য না থাকলে একটি লাফানো অনুসরণ করবে। চালিয়ে যেতে আপনাকে বাইনারি থেকে বাইরে এডিট করতে হতে পারে। আপনার তাত্ক্ষণিক লক্ষগুলির জন্য যা আমি ধরে নিয়েছি x86 এ হবে আমি ভাবি না যে আপনার কোনও সমস্যা হবে।

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

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


উত্তরের জন্য ধন্যবাদ. তবে আমি কীভাবে একটি বিযুক্তি লিখতে জানি না।
ইলিজিয়াম গ্রাস করেছে

8
"আপনার নিজস্ব বিচ্ছিন্নকারী লিখুন" - আমি সম্মত হলাম, এটি কীভাবে আমি সবচেয়ে ভাল শিখলাম। ("তবে কীভাবে বিচ্ছিন্নকারী লিখতে হয় তা আমি জানি না") কী হবে? LOL।
স্ল্যাশমেজ

আমি তোমার সাথে যাচ্ছি! সবেমাত্র একটি এমএসপি ৪৩০ এবং এটিতে একটি বই কিনেছেন ... :)
পেপে

1
আমার কিছু এমএসপি 30৩০ উদাহরণ রয়েছে github.com/dwelch67 প্লাস কিছু asm ইত্যাদি শেখার জন্য পরীক্ষার জন্য কয়েকটি নির্দেশ সেট সিমুলেটর
পুরানো_টিমার

আমি সত্যিই, এই ধারণাটি সত্যিই পছন্দ করি।
মিলি স্মিথ

33

আপনি যে হাতের মুঠোয় লিখে যাবেন এবং সংকলক দ্বারা উত্পন্ন সমাবেশটি যখন উচ্চ স্তরের থেকে দেখা যায় তখন প্রায়শই খুব আলাদা হয়। অবশ্যই, প্রোগ্রামটির অন্তর্গতগুলি খুব একই রকম হবে (কেবলমাত্র এনকোড করার জন্য বিভিন্ন ধরণের অনেকগুলি উপায় রয়েছে a = b + c, সর্বোপরি) তবে আপনি যখন ইঞ্জিনিয়ারকে কিছু বিপরীত করার চেষ্টা করছেন তখন এগুলি সমস্যা হয় না। সংকলকটি এমনকি সাধারণ এক্সিকিউটেবলগুলিতে এক টন বয়লারপ্লেট কোড যুক্ত করবে : গতবার তুলনা করে, জিসিসি দ্বারা সংকলিত "হ্যালো ওয়ার্ল্ড" প্রায় 4 কেবি ছিল, যখন সমাবেশে হাতে হাতে লেখা থাকলে এটি প্রায় 100 বাইট। এটি উইন্ডোজে খারাপ: গতবারের তুলনায় আমি স্বীকার করে নিলাম, এটি গত শতাব্দীর ছিল) সবচেয়ে ছোট "হ্যালো ওয়ার্ল্ড" আমি আমার উইন্ডোজ সংকলনটি তখনকার পছন্দের উত্সের জন্য 52kB পেতে পারি! সাধারণত এই বয়লারপ্লেটটি একবারে একবার কার্যকর করা হয়, যদি তা হয় তবে তাই এটি প্রোগ্রামের গতিতে খুব বেশি প্রভাব ফেলবে না - যেমন আমি উপরে বলেছি, প্রোগ্রামটির মূল অংশটি, যেখানে বেশিরভাগ এক্সিকিউশন সময় ব্যয় করা হয়, প্রায়শই সংকলিত কিনা তা একই রকম হয় হাতে লেখা

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

আপনি যা করতে চান তা হ'ল আইএ -32 এবং এএমডি 64 (উভয় একত্রে আবৃত) ইনটেল এবং এএমডি থেকে আর্কিটেকচার ম্যানুয়ালগুলি , এবং নির্দেশাবলী এবং অপকোডগুলির প্রাথমিক অংশগুলি দেখুন। কেবল সমাবেশ ভাষার মূল বিষয়গুলি নীচে নামার জন্য, অ্যাসেম্বলি ভাষার বিষয়ে দুটি বা টিউটোরিয়াল পড়ুন। তারপরে একটি ছোট ধরুননমুনা প্রোগ্রাম যা আপনি আগ্রহী এবং এটিকে বিচ্ছিন্ন করে দিন: এর নিয়ন্ত্রণ প্রবাহের মধ্য দিয়ে পদক্ষেপ দিন এবং এটি কী করছে তা বোঝার চেষ্টা করুন। অন্য কিছু করার জন্য আপনি এটি প্যাচ করতে পারেন কিনা তা দেখুন। তারপরে অন্য প্রোগ্রামের সাথে আবার চেষ্টা করুন, এবং যতক্ষণ না আপনি আরও কার্যকর লক্ষ্য অর্জনের জন্য পর্যাপ্ত আরামদায়ক হন ততক্ষণ পুনরাবৃত্তি করুন। বিপরীত প্রকৌশল সম্প্রদায় দ্বারা উত্পাদিত "ক্র্যাকমস" এর মতো জিনিসে আপনার আগ্রহী হতে পারে, যা বিপরীত প্রকৌশল আগ্রহী লোকদের পক্ষে তাদের হাত চেষ্টা করার জন্য চ্যালেঞ্জ, এবং আশা করি যে পথে কিছু শিখবে। এগুলি বেসিক (এখানে শুরু করুন!) থেকে অসম্ভব পর্যন্ত অসুবিধার মধ্যে রয়েছে।

সর্বোপরি, আপনার কেবল অনুশীলন করা দরকার । বিপরীত প্রকৌশল সহ অন্যান্য অনেক শাখার মতোই অনুশীলনটি নিখুঁত করে তোলে ... বা কমপক্ষে আরও ভাল


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

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

এছাড়াও, এমএসভিসি ++ ইনলাইন সমাবেশ কোডের জন্য কী ব্যবহার করে? MASM?
ইলিজিয়াম খাওয়া 14

15

আমি সর্বাধিক উত্তরের শস্যের বিরুদ্ধে যাব এবং নুথের এমআইপিএস আরআইএসসি আর্কিটেকচারের এমএমআইএক্স রূপটি সুপারিশ করব এটি x86 বা এআরএম অ্যাসেম্বলি ভাষার মতো ব্যবহারিকভাবে কার্যকর হবে না (আজকাল তারা বেশিরভাগ বাস্তব জীবনের চাকরিতে নিজেকে এতটা গুরুত্বপূর্ণ বলে মনে করে না ... ;-), তবে এটি নথের সর্বশেষের যাদুটি আপনার জন্য আনলক করবে) অ্যালগরিদম এবং ডেটা স্ট্রাকচারের গভীর নিম্ন-স্তরের বোঝার উপর সর্বকালের সেরা মাস্টারপিসের সংস্করণ - টিএওসিপি , "আর্ট অফ কম্পিউটার প্রোগ্রামিং"। আমি যে দুটি ইউআরএল উদ্ধৃত করেছি তার লিঙ্কগুলি এই সম্ভাবনাটি অন্বেষণ করার দুর্দান্ত উপায় way


12

(আমি আপনার সম্পর্কে জানি না তবে আমি সমাবেশে উচ্ছ্বসিত ছিলাম)

আপনার পিসিতে ইতিমধ্যে সমাবেশের সাথে পরীক্ষার জন্য একটি সাধারণ সরঞ্জাম ইনস্টল করা আছে is

স্টার্ট মেনু-> রান এ যান এবং টাইপ করুনdebug

ডিবাগ (কমান্ড)

ডিবাগ হ'ল ডস, এমএস-ডস, ওএস / 2 এবং মাইক্রোসফ্ট উইন্ডোজে একটি কমান্ড (কেবলমাত্র x86 সংস্করণ, x64 নয়) যা প্রোগ্রামটি ডিবাগ.এক্সি (বা ডস এর পুরানো সংস্করণে ডিইবিইউজি.কম) চালায়। ডিবাগ একটি এসেম্বলার, ডিসেসেম্বেবলার, বা হেক্স ডাম্প প্রোগ্রাম হিসাবে ব্যবহারকারীদের মেমরির বিষয়বস্তুগুলি ইন্টারেক্টিভভাবে পরীক্ষা করতে পারে (সমাবেশ ভাষা, হেক্সাডেসিমাল বা এএসসিআইআই), পরিবর্তন করতে পারে এবং সিওএম, এক্সইএইচ এবং অন্যান্য ফাইলের প্রকারগুলি কার্যকর করতে পারে। এটিতে বেশ কয়েকটি সাবকম্যান্ড রয়েছে যা নির্দিষ্ট ডিস্ক সেক্টর, আই / ও পোর্ট এবং মেমরি ঠিকানাগুলি অ্যাক্সেস করতে ব্যবহৃত হয়। এমএস-ডস ডিবাগ 16-বিট প্রক্রিয়া স্তরে চলে এবং তাই এটি 16 বিট কম্পিউটার প্রোগ্রামের মধ্যে সীমাবদ্ধ । ফ্রিডোস ডিবাগের একটি "ডিইউবিজিএক্স" সংস্করণ রয়েছে যা 32-বিট ডিপিএমআই প্রোগ্রামগুলিকে সমর্থন করে।

টিউটোরিয়াল:


আইডিএ প্রোতে (বা অলিডিবিজি ) আপনি যে কোডটি দেখছেন তা যদি আপনি বুঝতে চান তবে আপনাকে কীভাবে সংকলিত কোডটি কাঠামোবদ্ধ তা শিখতে হবে। আমি বইটি রিভার্সিং: রিভার্স ইঞ্জিনিয়ারিংয়ের গোপনীয়তার প্রস্তাব দিই

আমি debugসমাবেশ শিখতে শুরু করার সাথে কয়েক সপ্তাহ ধরে পরীক্ষা করেছি (15 বছর আগে)।
নোট করুন যে debugবেস মেশিন স্তরে কাজ করে, কোনও উচ্চ স্তরের সমাবেশ কমান্ড নেই।

আর এখন একটি সহজ উদাহরণ:

দিন aসমাবেশ কোড লেখা শুরু করুন - প্রোগ্রাম নিচে টাইপ - এবং পরিশেষে দিতে gএটি চালানোর জন্য।

বিকল্প পাঠ


( INT 21প্রদর্শন পর্দায় হওয়া ASCII গৃহস্থালির কাজ সঞ্চিত DLরেজিস্টার যদি AHরেজিস্টার সেট করা হয় 2- INT 20প্রোগ্রাম বন্ধ)


"জি" প্রবেশের আগে আমাকে সিটিআরএল-সি মারতে হয়েছিল।
এরিকপ

2
@ এরিকপ, আপনাকে সিটিআরএল-সি মারতে হবে না। উদাহরণস্বরূপ, আপনি aসমাবেশ কোড লিখতে শুরু করতে টাইপ করুন এবং [enter]। যদি আপনি [এন্টার] দু'বার আঘাত করেন তবে আপনি সমাবেশ মোড থেকে প্রস্থান করবেন। gএটি চালানোর জন্য & প্রবেশ করান (ডিফল্টরূপে 100 অফসেট)।
নিক দানডৌলাকিস

এটি কি আসলে একটি স্ট্যাককে উপচে ফেলেছে বা এটি কেবল এটি স্ক্রিনে লিখবে?
জানুস ট্রয়লসেন

1
@ ব্যবহারকারী, এটি কেবল এই সাইটের নামটি লিখেছেন :-)
নিক ডানডৌলাকিস

@ জানুস ট্রয়েলসন এই নম্বরগুলি (53, 74, 61, ইত্যাদি) 'এস' টি '' এ 'এর জন্য এসসিআইআই কোডগুলি ... প্রতিটি আন্ত 21 কল একটি সময়ে একটি অক্ষর মুদ্রণ করে! এই কারণেই
সমাবেশটি

8

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

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


7

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

আমি আপনার উদ্দেশ্যে করা আর্কিটেকচার সম্পর্কে কেবলমাত্র শিখব যে আপনি বুনিয়াদি বুঝতে পারেন, তারপরে ডানদিকে ঝাঁপিয়ে পড়ুন এবং আপনার সংকলকের আউটপুট বুঝতে চেষ্টা করবেন। ইন্টেল ম্যানুয়ালগুলি দিয়ে নিজেকে সজ্জিত করুন এবং কেবল আপনার সংকলকের আউটপুটটিতে ডুব দিন। একটি ছোট ফাংশনে আগ্রহের কোডটি বিচ্ছিন্ন করুন, যাতে আপনি পুরো বিষয়টি বুঝতে নিশ্চিত হন understand

আমি বেসিকগুলি বিবেচনা করব:

  • নিবন্ধসমূহ: কতজন আছে, তাদের নাম কী এবং তাদের আকারগুলি কী?
  • অপারেন্ড অর্ডার: এর add eax, ebxঅর্থ "EX এ EX যুক্ত করুন এবং ফলাফলটি Eax এ সঞ্চয় করুন"।
  • এফপিইউ: ভাসমান-পয়েন্ট স্ট্যাকের বেসিকগুলি এবং আপনি কীভাবে এফপি থেকে রূপান্তর করবেন / তা শিখুন।
  • ঠিকানা মোড: [বেস + অফসেট * গুণক], তবে গুণকটি কেবল 1, 2, বা 4 (বা সম্ভবত 8?) হতে পারে
  • কলিং কনভেনশনস: কোনও ফাংশনে প্যারামিটারগুলি কীভাবে পাস করা হয়?

সংকলকটি কী প্রকাশ করে তা অনেক সময় অবাক হবে। হেক সংকলক কেন ভাবলো যে এটি একটি ভাল ধারণা হবে তা নির্ধারণের ধাঁধাটি তৈরি করুন। এটি আপনাকে অনেক কিছু শিখিয়ে দেবে।

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

আমার কেবলমাত্র অন্য পরামর্শটি হ'ল আপনার যখন পছন্দ হয় তখন সর্বদা এটিএন্ডটিটির পরিবর্তে ইন্টেল সিনট্যাক্স ব্যবহার করা। আমি এই বিষয়টিতে বেশ নিরপেক্ষ থাকতাম, যেদিন আমি বুঝতে পারি যে কিছু নির্দেশাবলীর দুটিয়ের মধ্যে সম্পূর্ণ আলাদা (উদাহরণস্বরূপ, movslqএটিএন্ডটি সিন্ট্যাক্স movsxdইনটেল সিনট্যাক্সে রয়েছে)। যেহেতু ম্যানুয়ালগুলি সমস্ত ইন্টেল সিনট্যাক্স ব্যবহার করে লেখা হয়েছে, কেবল এটির সাথে আটকে দিন।

শুভকামনা!


3

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


3

ডিবাগ ব্যবহার করার পরামর্শটি একটি মজাদার একটি, এর সাথে অনেক ঝরঝরে কৌশলগুলি করা যেতে পারে। তবে, আধুনিক অপারেটিং সিস্টেমের জন্য, 16 বিট অ্যাসেমব্লি শেখা কিছুটা কম কার্যকর হতে পারে। পরিবর্তে, ntsd.exe ব্যবহার করে বিবেচনা করুন। এটি উইন্ডোজ এক্সপি-তে নির্মিত হয়েছে (এটি সার্ভার ২০০৩ এ এবং এটির উপরে দুর্ভাগ্যক্রমে) ছিল যা এটি এত বেশি বিস্তৃত হিসাবে এটি শেখার জন্য একটি সুবিধাজনক সরঞ্জাম হিসাবে তৈরি করে।

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

এই প্যাকেজটিতে অন্তর্ভুক্ত ডিবাগার.ইচএম ফাইলটি অস্বাভাবিক সিনট্যাক্সটি বের করার চেষ্টা করার সময় বিশেষভাবে কার্যকর।

এনটিএসডি-র দুর্দান্ত জিনিসটি হ'ল আপনি এটিকে আপনার নিকটবর্তী যে কোনও এক্সপি মেশিনে পপ করতে পারেন এবং এটি সমাবেশে ব্যবহার করতে বা বিচ্ছিন্ন করতে পারেন। এটি একটি / দুর্দান্ত / এক্স 86 বিধানসভা শেখার সরঞ্জাম করে। উদাহরণস্বরূপ (ডস প্রম্পটে এটি ইনডল হওয়ায় সিডিবি ব্যবহার করা, এটি অন্যথায় অভিন্ন):

(প্রতীক ত্রুটিগুলি অপ্রাসঙ্গিক হওয়ায় এড়িয়ে যাওয়া - এছাড়াও, আমি আশা করি এই ফর্ম্যাটিংটি কাজ করে, এটি আমার প্রথম পোস্ট)

C:\Documents and Settings\User>cdb calc

Microsoft (R) Windows Debugger Version 6.10.0003.233 X86
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: calc
Symbol search path is: *** Invalid ***
Executable search path is:
ModLoad: 01000000 0101f000   calc.exe
ModLoad: 7c900000 7c9b2000   ntdll.dll
ModLoad: 7c800000 7c8f6000   C:\WINDOWS\system32\kernel32.dll
ModLoad: 7c9c0000 7d1d7000   C:\WINDOWS\system32\SHELL32.dll
ModLoad: 77dd0000 77e6b000   C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e70000 77f02000   C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fe0000 77ff1000   C:\WINDOWS\system32\Secur32.dll
ModLoad: 77f10000 77f59000   C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e410000 7e4a1000   C:\WINDOWS\system32\USER32.dll
ModLoad: 77c10000 77c68000   C:\WINDOWS\system32\msvcrt.dll
ModLoad: 77f60000 77fd6000   C:\WINDOWS\system32\SHLWAPI.dll
(f2c.208): Break instruction exception - code 80000003 (first chance)
eax=001a1eb4 ebx=7ffd6000 ecx=00000007 edx=00000080 esi=001a1f48 edi=001a1eb4
eip=7c90120e esp=0007fb20 ebp=0007fc94 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:000> r eax
eax=001a1eb4
0:000> r eax=0
0:000> a eip
7c90120e add eax,0x100
7c901213
0:000> u eip
ntdll!DbgBreakPoint:
7c90120e 0500010000      add     eax,100h
7c901213 c3              ret
7c901214 8bff            mov     edi,edi
7c901216 8b442404        mov     eax,dword ptr [esp+4]
7c90121a cc              int     3
7c90121b c20400          ret     4
ntdll!NtCurrentTeb:
7c90121e 64a118000000    mov     eax,dword ptr fs:[00000018h]
7c901224 c3              ret
0:000> t
eax=00000100 ebx=7ffd6000 ecx=00000007 edx=00000080 esi=001a1f48 edi=001a1eb4
eip=7c901213 esp=0007fb20 ebp=0007fc94 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
ntdll!DbgUserBreakPoint+0x1:
7c901213 c3              ret
0:000>`

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


1
ক্রিস ইগলের বইয়ের জন্য +1। R00t এর Sk3wl এর জন্য সেখানে কিছুটা ভালোবাসা রেখেছিল;)
mrduclaw

3

আমি সম্প্রতি একটি কম্পিউটার সিস্টেমের ক্লাস নিয়েছি। বিষয়গুলির মধ্যে একটি ছিল হার্ডওয়্যার সাথে যোগাযোগের একটি সরঞ্জাম হিসাবে সমাবেশ Assembly

আমার জন্য, কম্পিউটার সিস্টেমগুলি কীভাবে কাজ করে তার বিশদ না বুঝে সমাবেশের জ্ঞান সম্পূর্ণ হত না। এটি বুঝতে পেরে, একটি প্রসেসরের আর্কিটেকচারে সমাবেশ নির্দেশাবলী কেন দুর্দান্ত তবে অন্য স্থাপত্যের পক্ষে কেন ভয়াবহ তা একটি নতুন উপলব্ধি নিয়ে আসে।

এটি দেওয়া, আমি আমার শ্রেণীর পাঠ্য বইয়ের প্রস্তাব দিতে আগ্রহী:

কম্পিউটার সিস্টেমস: একজন প্রোগ্রামারের দৃষ্টিভঙ্গি

কম্পিউটার সিস্টেমস: একজন প্রোগ্রামারের দৃষ্টিভঙ্গি
(উত্স: সিএমইউ.ইডু )

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


2

আমি মনে করি আপনি ASCII -ized অপকোড মিমোনিক্স (এবং তাদের পরামিতি) শিখতে চান, যা ডিসসেম্বেবলার দ্বারা আউটপুট এবং যা একটি এসেম্বলারের দ্বারা (ইনপুট হিসাবে ব্যবহার করা যেতে পারে) দ্বারা বোঝা যায়।

যে কোনও সমাবেশকারী (যেমন এমএএসএম) করতেন।

এবং / অথবা এটি সম্পর্কে একটি বই পড়া আপনার পক্ষে ভাল হতে পারে (এসও-তে সুপারিশকৃত বই রয়েছে, কোনটি আমার মনে নেই)।


2

আপনি কি উইন্ডোয় অন্যান্য ডিভ কাজ করছেন? কোন আইডিই? যদি এটি ভিএস হয়, তবে কেবল ডিসসেম্বলড কোডটি পড়ার জন্য অতিরিক্ত আইডিই করার দরকার নেই: আপনার অ্যাপটি ডিবাগ করুন (বা কোনও বাহ্যিক অ্যাপ্লিকেশনটিতে সংযুক্ত করুন), তারপরে বিচ্ছিন্ন উইন্ডোটি খুলুন (ডিফল্ট সেটিংসে, এটি Alt + 8)। আপনি স্বাভাবিক কোডের মাধ্যমে মেমরি / রেজিস্টারগুলি পদক্ষেপ এবং দেখুন। আপনি রেজিস্টার উইন্ডোটি উন্মুক্ত রাখতে চান (ডিফল্টরূপে Alt + 5)।

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

আপনি যদি কোনও বইয়ে বিনিয়োগ করতে আগ্রহী হন তবে এখানে একটি দুর্দান্ত সূচনা পাঠ্য। 'X86' এর জন্য অ্যামাজন অনুসন্ধান করুন এবং আপনি আরও অনেকগুলি পেতে চাই। আপনি এখানে অন্য একটি প্রশ্ন থেকে আরও কয়েকটি দিকনির্দেশ পেতে পারেন ।

পরিশেষে, আপনি থেকে বেশ একটু উপকৃত হতে পারেন পড়া কিছু কম - স্তর ব্লগ। এই বাইট-আকারের তথ্য বিটগুলি ব্যক্তিগতভাবে আমার জন্য সবচেয়ে ভাল কাজ করে।


2

এটি অগত্যা আপনাকে দক্ষ কোড লিখতে সহায়তা করবে না!

আই 86 এর ওপ কোডগুলি কমবেশি একটি "লিগ্যাসি" ফর্ম্যাট যা কোডের নিখুঁত ভলিউম এবং উইন্ডোজ এবং লিনাক্সের জন্য নির্বাহযোগ্য বাইনারিগুলির কারণে টিকে আছে।

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

তাই সংকলকগণ ডিফল্টরূপে x86 কোড উত্পন্ন করে এবং আধুনিক চিপগুলি এনসেন্ট অপের কোডগুলি পড়ে এবং যা তারা সমান্তরাল ঝুঁকি নির্দেশগুলিতে দেখতে পায় তা ট্রান্সলেট করে পুনরায় সাজানো এক্সিকিউশন, অনুমানমূলক এক্সিকিউশন, পাইপলাইনিং ইত্যাদির সাথে সাথে তারা প্রসেসরের 32 বা 64 নিবন্ধকের পুরো ব্যবহার করে প্রকৃতপক্ষে (x86 নির্দেশিকায় আপনি যে করুণ 8 টি দেখেছেন তার বিপরীতে রয়েছে))

এখন সমস্ত অপ্টিমাইজ করা সংকলকরা জানেন যে এটি আসলে ঘটেছিল, তাই তারা ওপি কোডগুলির সিকোয়েন্সগুলি কোড আপ করে যা তারা জানে যে চিপটি দক্ষতার সাথে অনুকূল করতে পারে - যদিও এই সিকোয়েন্সগুলির মধ্যে একটি কিছু প্রায় একটি 1990 এর মতো প্রোগ্রাম হিসাবে অযোগ্য দেখায়।

কোনও এক মুহুর্তে আপনাকে মেনে নিতে হবে যে হাজার হাজার মানুষ বছরের প্রচেষ্টা সংকলক লেখকরা যে দশ হাজার দশক চেষ্টা করেছেন তা পরিশোধ করেছেন, এবং তাদের বিশ্বাস করুন।

আরও কার্যকর রানটাইম পাওয়ার সহজতম ও সহজতম উপায় হ'ল ইন্টেল সি / সি ++ সংকলক কেনা। এফিসিসিন্ট সংকলকগুলির কাছে তাদের একটি কুলুঙ্গি বাজার রয়েছে এবং তাদের ভিতরে কী চলছে সে সম্পর্কে চিপ ডিজাইনারদের জিজ্ঞাসা করতে সক্ষম হওয়ার সুবিধা রয়েছে।


আপনার গল্পটি কিছুটা পরামর্শ দেয় যে সিআইএসসি প্রসেসরগুলি অভ্যন্তরীণভাবে আরআইএসসি প্রসেসর হয়ে উঠেছে। আমি ভুল বুঝে থাকতে পারি, তবে এটি কেবল সত্য নয়। আর করুণ 8? আধুনিক প্রসেসরগুলি (বলুন, ১৯৯৯ সাল থেকে) আরও অনেকগুলি অন্তর্ভুক্ত রয়েছে: 10 জিপিআর: ইএক্স-এফএলজিএস, 80 বিট এফপি 0-এফপি 7, 64-বিট এমএমএক্স 0-এমএমএক্স 7, 128-বিট এক্সএমএম 0-এক্সএমএম 7, বিভাগ: সিএস-জিএস, বিশেষ: সিআর-সিআর 4 , DR0-DR7, TR3-TR7, GDTR, IDTR, LDTR, MSRs এবং x86-64 এও R8-R15। এগুলি সমস্তই রিং -3 থেকে অ্যাক্সেসযোগ্য নয়, তবে বেশিরভাগই রয়েছে এবং বেশিরভাগই সাম্প্রতিক (2006-পরবর্তী) জিসিসি / ভিসি ++ সংকলকগুলি দ্বারা ব্যবহৃত হয়। সামগ্রিকভাবে "করুণ 8" এর চেয়ে কিছু বেশি);)।
আবেল

2

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

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

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

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


1

শিক্ষাগত অ্যাসেম্বলি ভাষাগুলির মধ্যে একটি হ'ল এমআইপিএস। আপনি এর জন্য এমআইপিএস সিমুলেটর (স্পিম) এবং বিভিন্ন শিক্ষামূলক উপকরণ পেতে পারেন।

ব্যক্তিগতভাবে, আমি কোনও ভক্ত নই। আমি বরং আইএ 32 পছন্দ করি।


এমআইপিএস দুর্দান্ত। 68000 হ'ল, এবং যদি আপনি 68000 শিখেন তবে আপনি ম্যামে চলমান বাইনারিগুলি লিখতে পারেন। :-)
নোসারেডা

1

আমার ব্যক্তিগত প্রিয়টি এনএএসএম, বেশিরভাগ কারণ এটি বহু-প্লাটফর্ম, এবং এটি এমএমএক্স, এসএসই, -৪-বিট সংকলন করে ...

আমি কিছু সাধারণ সি উত্স ফাইলটি জিসিসি দিয়ে সংকলন করতে শুরু করেছি এবং জিসিসি-ফর্ম্যাট থেকে ন্যাসেম-ফর্ম্যাটে রূপান্তরকারীদের নির্দেশিকা "ট্রান্স-কোডিং" করতে শুরু করেছি। তারপরে আপনি কোডের ছোট্ট অংশ পরিবর্তন করতে পারেন এবং এটি সম্পাদন করে এমন পারফরম্যান্স উন্নতি করতে পারে।

এনএএসএম ডকুমেন্টেশন সত্যই সম্পূর্ণ, বই বা অন্যান্য উত্স থেকে আমার খোঁজ করার দরকার হয়নি।


1

আপনার সমাবেশগুলি শেখার জন্য কিছু লিঙ্কগুলি কার্যকর মনে হতে পারে - উত্স কোড ম্যাপিং -

সমাবেশ এবং ডিবাগিং আর্ট

ডিবাগিং - রানটাইম কোড সংশোধন করা হচ্ছে

আশা করি আপনি এগুলি দরকারী খুঁজে পেয়েছেন।


0

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


0

আপনার লক্ষ্যে পৌঁছানোর জন্য, আপনি যে আইডিইতে রয়েছেন তা দিয়ে শুরু করার বিষয়টি আপনি বিবেচনা করতে পারেন The আপনাকে নিবন্ধগুলি দেখতে এবং মেমরির জায়গাগুলি সন্ধান করার জন্য সাধারণত কোনও ধরণের দৃশ্য রয়েছে।

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

আমার পরামর্শটি হ'ল কিছুক্ষণের জন্য সেই ধরণের সরঞ্জামগুলি নিয়ে ঘুরে বেড়াতে এবং আপনার পা ভেজাতে হবে, তারপরে উঠে দাঁড়াবে? নিচে? আপনি যে প্লাটফর্মটি চালাচ্ছেন তার উপর সোজা এসেম্বলারের কোডটি।

সেখানে প্রচুর দুর্দান্ত সরঞ্জাম রয়েছে তবে প্রথমে খাড়া শেখার বক্রতা এড়াতে আপনার এটি আরও মজাদার হতে পারে।


0

আমরা একটি মাইক্রোকন্ট্রোলার ডেভলপমেন্ট কিট (মটোরোলা এইচসি 12) এবং একটি ঘন ডেটাশিট দিয়ে সমাবেশ শিখেছি।


0

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


0

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


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

0

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

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

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