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

نام تاپیک: مشکل stack در اجرای یک تابع تو در تو

  1. #1

    Unhappy مشکل stack در اجرای یک تابع تو در تو

    با سلام ، خدمت دوستان و اساتید محترم
    من یک bootloader با fasm نوشتم که یک کرنل دو مرحله ای رادر حافظه بار گذاری می کند. سپس کد کرنل بخش exe خود را در آدرس 0x01000000 کپی کرده و با تنظیم stack اجرا را به entrypoint فایل exe می دهد تا اینجای کار مشکلی وجود ندارد مشکل در اجرای فایل exe می باشد اگر تابع test فایل exe با عدد بزرگ اجرا شود با وجود اینکه stack همچنان فضای کافی دارد اما esp دچار اختلال می شود و آدرس بازگشت دچار اختلال شده و اجرا از دست می رود . من نتوانستم علت آن را بفهمم.
    در ضمن من از tcc جهت تولید فایل exe استفاده کرده ام.
    نحوه کار mkflp2.py نیز به این صورت است که یک فلاپی فرمت شده با fat12 را باز کرده mbr را بر روی آن کپی می کند.
    پیشا پیش از توجه دوستان تشکر می کنم.
    فایل های ضمیمه فایل های ضمیمه

  2. #2

    نقل قول: مشکل stack در اجرای یک تابع تو در تو

    با سلام ، خدمت دوستان و اساتید محترم
    من یک bootloader با fasm نوشتم که یک کرنل دو مرحله ای رادر حافظه بار گذاری می کند. سپس کد کرنل بخش exe خود را در آدرس 0x01000000 کپی کرده و با تنظیم stack اجرا را به entrypoint فایل exe می دهد تا اینجای کار مشکلی وجود ندارد مشکل در اجرای فایل exe می باشد اگر تابع test فایل exe با عدد بزرگ اجرا شود با وجود اینکه stack همچنان فضای کافی دارد اما esp دچار اختلال می شود و آدرس بازگشت دچار اختلال شده و اجرا از دست می رود . من نتوانستم علت آن را بفهمم.
    در ضمن من از tcc جهت تولید فایل exe استفاده کرده ام.
    نحوه کار mkflp2.py نیز به این صورت است که یک فلاپی فرمت شده با fat12 را باز کرده mbr را بر روی آن کپی می کند.
    پیشا پیش از توجه دوستان تشکر می کنم.
    فایل exe شما با زبان C هست؟
    دقیقا قالب فایل exe هست؟
    آدرسها رو در لینکر تنظیم کردین؟

  3. #3

    نقل قول: مشکل stack در اجرای یک تابع تو در تو

    گفتم مشکل مال exe نیست کد ذیل رو در kernel.bin که با fasm کامپایل شده قرار دادم . وقتی esp به اندازه 0x100000 کاهش پیدا می کنه برنامه به مشکل می خوره:
    mov eax,0x00080000mov edx,esp
    call recu
    recu:
    sub edx,4
    cmp edx,esp
    jnz recu_error
    dec eax
    jz recu_else
    call recu
    jmp recu_ret
    recu_else:

    recu_ret:
    cmp edx,esp
    jnz recu_error
    add edx,4
    ret




    recu_error:



    مقدار eax تا 0x40000 برنامه را به درستی به پایان می برد اما اگر eax هر مقداری بیشتر قرار بگیرد مقدار stack توسط فرایندی که نمی دونم باز نویسی می شه

  4. #4

    نقل قول: مشکل stack در اجرای یک تابع تو در تو

    کد بالا تو vmware l مشکل داره و تو bochs کد درست اجرا می شه.

  5. #5

    نقل قول: مشکل stack در اجرای یک تابع تو در تو

    باآخرین تستی که انجام دادم این مشکل مربوط میشه به تعدادی دستور ret پشت سر هم.

    mov ecx,0x03000000
    mov ebx,test_loop1_2
    test_loop1_1:
    push ebx
    loop test_loop1_1
    test_loop1_2:
    cmp [esp],ebx
    jz test_loop1_3
    mov eax,esp
    call hex_eax
    jmp test_end
    test_loop1_3:
    ret
    test_end:

  6. #6

    نقل قول: مشکل stack در اجرای یک تابع تو در تو

    مشکل مربوط می شد به a20 تنظیمش نکرده بودم.

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

  1. مشکل در فراخوانی و اجرای یک تابع
    نوشته شده توسط sara_aryanfar در بخش PHP
    پاسخ: 2
    آخرین پست: دوشنبه 25 مهر 1390, 11:42 صبح
  2. مشکل با itemdatabound بعد از اجرای یک تابع
    نوشته شده توسط mahsa.n در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: سه شنبه 31 خرداد 1390, 11:26 صبح
  3. اجرای چند تابع در یک صفحه ، بطور همزمان
    نوشته شده توسط pzh در بخش PHP
    پاسخ: 1
    آخرین پست: سه شنبه 23 اسفند 1384, 17:44 عصر
  4. اجرای یک تابع در ساعتی مشخص در هر روز
    نوشته شده توسط در بخش SQL Server
    پاسخ: 14
    آخرین پست: دوشنبه 24 اسفند 1383, 11:01 صبح
  5. مشکل رنگ در اجرای برنامه در ویندوز 98 ...
    نوشته شده توسط alireza_63 در بخش برنامه نویسی در Delphi
    پاسخ: 5
    آخرین پست: سه شنبه 10 شهریور 1383, 15:42 عصر

برچسب های این تاپیک

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

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