আপনি কীভাবে ইনটেল সিনট্যাক্সে সমাবেশ কোড উত্পন্ন করতে জিসিসি ব্যবহার করবেন?


151

gcc -Sবিকল্প যেমন AT & T সিনট্যাক্স মধ্যে সমাবেশ কোড জেনারেট করবে, একটি উপায় আছে ইন্টেল সিনট্যাক্স ফাইল জেনারেট করতে হয়? নাকি দুজনের মধ্যে রূপান্তর করার কোনও উপায় আছে?


5
আপনি একক নির্দেশাবলী সহজেই এলএলভিএম-এমসি দিয়ে শেলের মধ্যে রূপান্তর করতে পারেন: echo "packsswb mm0,[bp+si-0x54]" | llvm-mc-3.2 -x86-asm-syntax=intelদেয়packsswb -84(%bp,%si), %mm0
জানুস ট্রয়লসন

উত্তর:


198

আপনি কি এই চেষ্টা করেছেন?

gcc -S -masm=intel test.c

অনির্ধারিত, তবে আমি এটি এই ফোরামে পেয়েছি যেখানে কেউ দাবি করেছে যে এটি তাদের পক্ষে কাজ করেছে।

আমি কেবল ম্যাকটিতে এটি চেষ্টা করেছি এবং এটি ব্যর্থ হয়েছে, তাই আমি আমার ম্যান পৃষ্ঠায় দেখেছি:

   -masm=dialect
       Output asm instructions using selected dialect.  Supported choices
       are intel or att (the default one).  Darwin does not support intel.

এটি আপনার প্ল্যাটফর্মে কাজ করতে পারে।

ম্যাক ওএসএক্সের জন্য:

clang++ -S -mllvm --x86-asm-syntax=intel test.cpp

সূত্র: https://stackoverflow.com/a/11957826/950427


এটির ভুল ফাইল নাম att2intel.sed থাকা সত্ত্বেও, সেড স্ক্রিপ্টটি ইন্টেল থেকে এটিটিতে অন্যভাবে রূপান্তরিত করে।
জোনাথন রাইনহার্ট

কারও কাছে ম্যাকের সমাধান আছে?
জোশুয়া গাল

কলঙ্ক বর্তমানে ইন্টেল সিনট্যাক্স গ্রাস করতে পারে না। দেখুন LLVM বাগ 24232: [X86] ইনলাইন সমাবেশ operands .intel_syntax সাথে কাজ করে না । এছাড়াও, কলং উপেক্ষা করে prefix/ noprefix(ক্লেং বিধানসভাটি গ্রাস করে কিনা তা নিশ্চিত কিনা) not
jw

17

দ্য

gcc -S -masm=intel test.c

আমার সাথে কাজ করে। তবে আমি অন্যভাবে বলতে পারি, যদিও এটির জিসিসি চালানোর সাথে কোনও সম্পর্ক নেই। এক্সিকিউটেবল বা অবজেক্ট কোড ফাইলটি সংকলন করুন এবং তারপরে নিচের মত অবজেক্টের সাহায্যে ইনটেল asm সিনট্যাক্সে অবজেক্ট কোডটি বিযুক্ত করুন:

 objdump -d --disassembler-options=intel a.out

এটি সাহায্য করতে পারে।


3
ইজডাম্প-ডি-এম ইন্টেলের মতোই
ডেভিড 天宇 ওয়াং

5

সিপিপি ফাইলে আমার এই কোডটি রয়েছে:

#include <conio.h>
#include <stdio.h>
#include <windows.h>

int a = 0;
int main(int argc, char *argv[]) {
    asm("mov eax, 0xFF");
    asm("mov _a, eax");
    printf("Result of a = %d\n", a);
    getch();
    return 0;
 };

এই কোডটি এই জিসিসি কমান্ড লাইনের সাথে কাজ করেছে:

gcc.exe File.cpp -masm=intel -mconsole -o File.exe

এটি * .exe ফাইলের ফলাফল করবে এবং এটি আমার অভিজ্ঞতায় কাজ করেছে।

Notes:
immediate operand must be use _variable in global variabel, not local variable.
example: mov _nLength, eax NOT mov $nLength, eax or mov nLength, eax

A number in hexadecimal format must use at&t syntax, cannot use intel syntax.
example: mov eax, 0xFF -> TRUE, mov eax, 0FFh -> FALSE.

এখানেই শেষ.


আমার $ gcc -S -masm=intel -mconsole a.c -o a.out gcc: error: unrecognized command line option ‘-mconsole’
ফেডোরায়

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