نمایش نتایج 1 تا 3 از 3

نام تاپیک: assembly development

  1. #1

    assembly development

    سلام دوستان
    من دارم سعی میکنم از راهنماها و ایبوکهای که رو اینترنت هست استفاده کنم اما یه چیزی رو نفهمیدم زبان اسمبلی مگه یه تعریف استاندارد نداره ؟ چرا تو بعضی از کدها یا اکسپلویتا اسمبلی رو یهجور مینویسن و بعضی جاها جور دیگه ؟ چطوری برنامه ای که تو masm نوشته شده ببرم رو لینوکس یا کدهای اسمبلی لینوکس رو بیارم به ویندوز ؟ اگر در این موارد راهنمائی کنین ممنون میشم

  2. #2
    سلام
    اسمبلی یک زبان نیست. املاهای اسمبلی های مختلف داریم. حتی روی PC هم ما چندین زبان اسمبلی داریم. چیزی که ثابته زبان ماشین است (روی یک سخت افزار خاص) و املای اسمبلی میتونه متفاوت باشه. شما اصلا یک زبان ایجاد کنید که به جای mov eax,ebx توش بنویسیم beriz eax,ebx.
    ممنون علی

  3. #3
    شما اصلا یک زبان ایجاد کنید که به جای mov eax,ebx توش بنویسیم beriz eax,ebx.
    خوب این دیگه ربطی به اسمبلی نداره ، میشه زبان what-ever-u-want .

    زبان اسمبلی مگه یه تعریف استاندارد نداره ؟
    نه مانند C یا جاوا . اما همیشه یک سری قواعد مشخص و روشن هست که ازشون استفاده میشه . معمولا" توسعه گران پردازنده ، برای اینکه برنامه نویسان بتونن روی سکوهای آنها کد بنویسند یک راهنمای آپکد به زبان اسمبلی منتشر میکنند ؛ یعنی راهنمائی که مشخص میکنه هر واحد زبان ماشین رو چطور میشه به یک معادل مناسب به زبان اسمبلی تبدیل کرد ؛ مثلا" اینتل سالهاست که یک راهنمای توسعه گر داره که ضمن معرفی قابلیتهای پردازنده هاش ، کمک میکنه برنامه نویسان بتونن با استفاده از "یک شکل صوری از اسمبلی" با پردازنده ارتباط برقرار کنند . بعد از این مرحله ، توسعه گران کامپایلر/اسمبلر ، با استفاده از اون قواعد اسمبلرهائی تولید میکنند که کدهای سطح بالا/یا کد اسمبلی دریافت میکنه و کد ماشین تولید میکنه و البته نهایتا" این کد ماشین در قالب یک فایل اجرائی سازگار با بستر و سکو ( مثلا" PE برای Wintel/IA32 ) بسته بندی میشه و تو اجراش میکنی . پس برای درک تفاوت بین کدهای اسمبلی که میبینی باید از دو بعد بهشون نگاه کنی : الف) برای کدام معماری سخت افزاری ؟ ب)توسط کدام توسعه گر اسمبلر ؟ و علاوه بر این توضیحات یه مورد جیم هم من اضافه میکنم : ج)با تبعیت از کدام "قاعدهء نمود" ؟

    الف: کد اسمبلی برای کدام معاری در نظر گرفته شده ؟ x86 یا PowerPC یا Alpha RICS یا ...؟بسته به اینکه کد برای کدام معماری در نظر گرفته شده باشه میتونه تفاوتهائی با سایر کدهای بکنه . برای اینکه به زبان اسمبلی برای یکی از این معماریها مسلط بشی بی تردید باید مرجع توسعه گری اون کمپانی رو تهیه کنی .

    ب : کد اسمبلی برای کدام اسمبلر نوشته شده ؟ MASM یا BASM ؟ TASM - FASM - NASM - PASM یا ..؟ هر کدام از این اسمبلرها علاوه بر مشخصه های خاص پردازنده و سکو ، علائم و افزونه های به خصوصی برای هوشمند تر کردن روند توسعه و خوانا تر شدن کد و بهینگی نگهداری و اشکالزدائی و ...دارند که با بقیه متفاوته . MASM یا Macro Assember روی ویندوز خیلی متداوله . ماکروهای زیادی داره و میشه باهاش سریعتر کد نوشت ، هر چند خروجی اش به خوبی خروجی TASM و FASM نیست . TASM یا Turbo Assembler متعلق به بورلند بود تا نهایتا" به Paradigm فروختش و حالا فقط به عنوان یکی از محصولات کلاسیکش میفروشتش و توسعه اش در اختیار Paradigm است که اونهم با تغییراتی در TASM اونو با نام PASM عرضه کرده که ضمن سازگاری با MASM امکانات بیشتری داره . FASM یا Flat Assembler عمر طولانی نداره اما پروژه موفقیه و پلتفرمهای زیادی رو میشناسه . BASM یا Borland Assembler یک نگارش خاص از TASM است که همراه با دلفی منتشر میشه و در واقع اسمبلر داخلی دلفی هم هست . NASM یا Netwide Assembler هم سورس آزاد است و مالتی پلتفرم و کدهای خوبی هم تولید میکنه . GAS یا GNU Assembler هم اسمبلر استاندارد GNU است که لینوکس و توسعه گرانش ازش استفاده میکنند و GCC هم برای اسمبل کد از GAS استفاده میکنه .

    ج:بدون توجه به سکو و بستر و اسمبلر ، کد اسمبلی از قواعد اینتل تبعیت میکنه یا AT&T . این روزها کد اسمبلی رو بدون توجه به اینکه برای کدوم سخت افزار و اسمبلر نوشته میشه ، دو جور مینویسند . یکی شبیه به استانداردی که اینتل منتشر کرد و دیگری شبیه به استاندارد قدیمی AT&T . کدهائی مانند کد زیر در حال تبعیت از استاندارد نمود اینتل هستند :

    mov eax, 4


    و کد زیر معادل کد فوق است اما با مدل AT&T :

    movl $4, %eax


    طبق یه قاعده نا نوشته و غیر رسمی معمولا" کسانی که برای ویندوز و اینتل کد مینویسند از مدل اینتل استفاده میکنند و اغلب توسعه گران یونیکس/لینوکس از مدل AT&T استفاده میکنند . هر چند [ اغلب] میشه براحتی روی هر محیطی بین این دو سوئیچ کرد مثلا" میشه براحتی با افزودن یک دایرکتیو ، روی GCC یا با GAS‌ ( همان GNU Assembler ) با مدل اینتل کد نوشت .

    تو بعضی از کدها یا اکسپلویتا اسمبلی رو یهجور مینویسن و بعضی جاها جور دیگه ؟
    چند روز قبل یکی از پسرکوچولوهای فامیل وقتی دید دود سیگار رو آروم آروم میدم بیرون ازم پرسید چرا بعضیها یهو دود سیگار رو میدن بیرون ؟ و بعضی ها یواش یواش ؟ و من درسته که چطوری دود سیگار رو بدم بیرون ؟ گفتم تو بگذار ریه ات اونقدر بزرگ بشه که بتونی پک اول رو بزنی ، بعدا" در مورد اینکه چطوری دودش رو میدی بیرون تصمیم بگیر .

    روز خوش

تاپیک های مشابه

  1. من java development kit 6 - JDK می خوام
    نوشته شده توسط bashir_nashi در بخش Java ME : نگارش میکرو جاوا
    پاسخ: 6
    آخرین پست: پنج شنبه 24 آبان 1386, 16:16 عصر
  2. -- Development Packages --
    نوشته شده توسط Inprise در بخش امنیت در نرم افزار و برنامه نویسی
    پاسخ: 3
    آخرین پست: جمعه 12 فروردین 1384, 19:59 عصر
  3. OS development
    نوشته شده توسط phantasm در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 5
    آخرین پست: جمعه 06 آذر 1383, 10:56 صبح
  4. کتاب آموزشی : Secure PHP Development
    نوشته شده توسط Inprise در بخش امنیت در شبکه
    پاسخ: 2
    آخرین پست: سه شنبه 21 بهمن 1382, 22:05 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •