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

نام تاپیک: استفاده از کدهای اسمبلی به صورت inline در سی شارپ

  1. #1
    کاربر دائمی آواتار CYCLOPS
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    یه ایران / یه تهران / یه شهرک اکباتان
    سن
    34
    پست
    1,053

    Question استفاده از کدهای اسمبلی به صورت inline در سی شارپ

    سلام به همه دوستان
    من تو یه پروژه لازم دارم یه سری کارها رو با زبان اسمبلی انجام بدم حالا سوالم اینه که چطوری میتونم کدهای اسمبلی رو به صورت inline در بین کدهای سی شارپ استفاده کنم ؟؟
    تو C++‎‎‎ با دستور asm__ اینکار رو میکردیم اینجا قضیه چطوری هست ؟؟

    پیشاپیش از دوستانی که همکاری میکنند متشکرم

  2. #2
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: استفاده از کدهای اسمبلی به صورت inline در سی شارپ

    دقیقا" میخواستم همین رو بپرسم.شما زودتر پریسدی.
    یه روش بلدم که با DEP حال نمیکنه.
    یه روش دیگه هم بلدم که مشکل codesize داره.

  3. #3
    کاربر دائمی آواتار CYCLOPS
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    یه ایران / یه تهران / یه شهرک اکباتان
    سن
    34
    پست
    1,053

    نقل قول: استفاده از کدهای اسمبلی به صورت inline در سی شارپ

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    دقیقا" میخواستم همین رو بپرسم.شما زودتر پریسدی.
    یه روش بلدم که با DEP حال نمیکنه.
    یه روش دیگه هم بلدم که مشکل codesize داره.

    حالا شما لطف کن همین دو روشی که میدونی رو بگو تا بعدا ببینیم دوستان دیگه روش بهتری میدونند یا نه ؟؟

  4. #4
    کاربر دائمی
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    تهران
    پست
    2,397

    نقل قول: استفاده از کدهای اسمبلی به صورت inline در سی شارپ

    تا اونجایی که بنده اطلاع دارم همچین قابلیتی در #C وجود نداره , علتش هم فکر کنم به خاطر رفتارهای پر خطری هست که میشه با اسمبلی انجام داد ؛ در واقع مایکروسافت در فریم ورک دات نت یکی از عمده تلاشهاش اینه که کمترین ریسک در برنامه های تولیدی تحت دات نت وجود داشته باشه.

  5. #5
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: استفاده از کدهای اسمبلی به صورت inline در سی شارپ

    نقل قول نوشته شده توسط CYCLOPS مشاهده تاپیک

    حالا شما لطف کن همین دو روشی که میدونی رو بگو تا بعدا ببینیم دوستان دیگه روش بهتری میدونند یا نه ؟؟
    روش اول اینه که متغیر _methodpter رو درون شی دلگیت به یه متغیر ارجا میدیم.
    روش دوم اینه که یه پراسیجر با lots of spaghetti درست مکنیم.بعد آدرسش رو میگیریم و توشو عوش میکنیم.
    اولی با DEP مشکل داره و دومی هم اندازه ی کد.
    من از هر دو روش جواب گرفتم ولی دنبال یه چیز بهتر هستم.

  6. #6
    کاربر دائمی آواتار CYCLOPS
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    یه ایران / یه تهران / یه شهرک اکباتان
    سن
    34
    پست
    1,053

    نقل قول: استفاده از کدهای اسمبلی به صورت inline در سی شارپ

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    روش اول اینه که متغیر _methodpter رو درون شی دلگیت به یه متغیر ارجا میدیم.
    روش دوم اینه که یه پراسیجر با lots of spaghetti درست مکنیم.بعد آدرسش رو میگیریم و توشو عوش میکنیم.
    اولی با DEP مشکل داره و دومی هم اندازه ی کد.
    من از هر دو روش جواب گرفتم ولی دنبال یه چیز بهتر هستم.
    دوست عزیز متاسفانه چیزی از مطالبی که گفتی سر در نیاوردم
    خواهشا یه تکه کد که خودت هم جواب گرفتی به عنوان مثال بذار
    بازم ممنون

  7. #7
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: استفاده از کدهای اسمبلی به صورت inline در سی شارپ

    1.
    using System;
    using System.Reflection;

    class Program
    {
    public delegate uint Ret1ArgDelegate(uint arg1);
    static uint PlaceHolder1(uint arg1) { return 0; }

    public static byte[] asmBytes = new byte[]
    {
    0x89,0xD0, // MOV EAX,EDX
    0xD1,0xC8, // ROR EAX,1
    0xC3 // RET
    };

    unsafe static void Main(string[] args)
    {
    fixed(byte* startAddress = &asmBytes[0]) // Take the address of our x86 code
    {
    // Get the FieldInfo for "_methodPtr"
    Type delType = typeof(Delegate);
    FieldInfo _methodPtr = delType.GetField("_methodPtr", BindingFlags.NonPublic | BindingFlags.Instance);

    // Set our delegate to our x86 code
    Ret1ArgDelegate del = new Ret1ArgDelegate(PlaceHolder1);
    _methodPtr.SetValue(del, (IntPtr)startAddress);

    // Enjoy
    uint n = (uint)0xFFFFFFFC;
    n = del(n);
    Console.WriteLine("{0:x}", n);
    }
    }
    }

    DEP

    2.(کدش رو پیدا نمیکنم.)

    3.این یکی با DEP مشکل نداره ولی هنوز هم قابلیت کدنویسی نداره:(همین الان پیدا کردم):

    [DllImport("coredll.dll", SetLastError = true)]
    static extern int[] VirtualAlloc(int lpAddress, int dwSize,uint
    flAllocationType, uint flProtect);


    IntPtr pExecutableBuffer = VirtualAlloc(
    IntPtr.Zero,
    new IntPtr(byteCount),
    AllocationType.MEM_COMMIT | AllocationType.MEM_RESERVE,
    MemoryProtection.PAGE_EXECUTE_READWRITE);

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

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