1 ضمیمه
مشکل stack در اجرای یک تابع تو در تو
با سلام ، خدمت دوستان و اساتید محترم
من یک bootloader با fasm نوشتم که یک کرنل دو مرحله ای رادر حافظه بار گذاری می کند. سپس کد کرنل بخش exe خود را در آدرس 0x01000000 کپی کرده و با تنظیم stack اجرا را به entrypoint فایل exe می دهد تا اینجای کار مشکلی وجود ندارد مشکل در اجرای فایل exe می باشد اگر تابع test فایل exe با عدد بزرگ اجرا شود با وجود اینکه stack همچنان فضای کافی دارد اما esp دچار اختلال می شود و آدرس بازگشت دچار اختلال شده و اجرا از دست می رود . من نتوانستم علت آن را بفهمم.
در ضمن من از tcc جهت تولید فایل exe استفاده کرده ام.
نحوه کار mkflp2.py نیز به این صورت است که یک فلاپی فرمت شده با fat12 را باز کرده mbr را بر روی آن کپی می کند.
پیشا پیش از توجه دوستان تشکر می کنم.
نقل قول: مشکل stack در اجرای یک تابع تو در تو
نقل قول:
با سلام ، خدمت دوستان و اساتید محترم
من یک bootloader با fasm نوشتم که یک کرنل دو مرحله ای رادر حافظه بار گذاری می کند. سپس کد کرنل بخش exe خود را در آدرس 0x01000000 کپی کرده و با تنظیم stack اجرا را به entrypoint فایل exe می دهد تا اینجای کار مشکلی وجود ندارد مشکل در اجرای فایل exe می باشد اگر تابع test فایل exe با عدد بزرگ اجرا شود با وجود اینکه stack همچنان فضای کافی دارد اما esp دچار اختلال می شود و آدرس بازگشت دچار اختلال شده و اجرا از دست می رود . من نتوانستم علت آن را بفهمم.
در ضمن من از tcc جهت تولید فایل exe استفاده کرده ام.
نحوه کار mkflp2.py نیز به این صورت است که یک فلاپی فرمت شده با fat12 را باز کرده mbr را بر روی آن کپی می کند.
پیشا پیش از توجه دوستان تشکر می کنم.
فایل exe شما با زبان C هست؟
دقیقا قالب فایل exe هست؟
آدرسها رو در لینکر تنظیم کردین؟
نقل قول: مشکل 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 توسط فرایندی که نمی دونم باز نویسی می شه
نقل قول: مشکل stack در اجرای یک تابع تو در تو
کد بالا تو vmware l مشکل داره و تو bochs کد درست اجرا می شه.
نقل قول: مشکل 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:
نقل قول: مشکل stack در اجرای یک تابع تو در تو
مشکل مربوط می شد به a20 تنظیمش نکرده بودم.