مشكلة في التنفيذ القائم على المكدس للوظيفة 0x42 من int 0x13

StackOverflow https://stackoverflow.com/questions/3065864

سؤال

أحاول نهجًا جديدًا لـ Int 0x13 (فقط لمعرفة المزيد حول الطريقة التي يعمل بها النظام): استخدام Stack لإنشاء DAP ..

على افتراض أن DL يحتوي على رقم القرص ، يحتوي AX على عنوان الإدخال القابل للتمهيد في PT ، يتم تحديث DS إلى الجزء الأيمن ويتم تعيين المكدس بشكل صحيح ، وهذا هو الرمز:

push DWORD 0x00000000
add ax, 0x0008
mov si, ax
push DWORD [ds:(si)]
push DWORD 0x00007c00
push WORD 0x0001
push WORD 0x0010
push ss
pop ds
mov si, sp
mov sp, bp
mov ah, 0x42
int 0x13

كما ترون: أدفع بنية DAP على المكدس ، تحديث DS: SI للإشارة إليها ، تم تعيين DL بالفعل ، ثم قم بتعيين AX على 0x42 و CALL INT 0x13

والنتيجة هي خطأ 0x01 في AH ومن الواضح أن مجموعة CF. لا يتم نقل أي قطاعات. لقد راجعت تتبع المكدس إلى ما لا نهاية ، ولا بأس ، جدول القسم على ما يرام أيضًا .. لا يمكنني معرفة ما أفتقده ...

هذا هو الجزء التتبع المكدس من حزمة عناوين القرص:

   0x000079ea:    10 00   adc    %al,(%bx,%si)
   0x000079ec:    01 00   add    %ax,(%bx,%si)
   0x000079ee:    00 7c 00   add    %bh,0x0(%si)
   0x000079f1:    00 00   add    %al,(%bx,%si)
   0x000079f3:    08 00   or     %al,(%bx,%si)
   0x000079f5:    00 00   add    %al,(%bx,%si)
   0x000079f7:    00 00   add    %al,(%bx,%si)
   0x000079f9:    00 a0 07 be   add    %ah,-0x41f9(%bx,%si)

أنا أستخدم أحدث إصدار من QEMU وأحاول القراءة من محرك الأقراص الثابتة (0x80) ، لقد حاولت أيضًا محاذاة 4Bytes للهيكل بنفس النتيجة (CF 1 AH 0x01) ، توجد الامتدادات.

هل كانت مفيدة؟

المحلول

ما هو mov sp, bp تفعل - أين BP Point؟ هل هو في (أو قريب من) SP قبل جزء الكود أعلاه؟

أظن أنك تقوم بإعادة ضبط مؤشر المكدس بطريقة تفسد DAP عن طريق استخدام مكدس مكالمة INT 13. على سبيل المثال:

1) Initial state:           2) After pushing DAP:

|  (stuff)  |               |  (stuff)  |
+-----------+ <-SP          +-----------+ <-BP?
             (== BP?)       |           |
                            |    DAP    |
                            |           |
                            +-----------+ <-SP


3) After mov sp, bp         4) INT 13 stack usage corrupts DAP:

|  (stuff)  |               |  (stuff)  |
+-----------+ <-SP?         +-----------+ SP
|           |               |XXXXXXXXXXX| | INT 13 uses stack 
|    DAP    |               |XXXXXXXXXXX| v
|           |               |corrupt DAP|
+-----------+ <-DS:SI       +-----------+

نصائح أخرى

هل تأكدت من امتدادات int 13؟

MOV AH, 41H
MOV BX, 55AAH          
MOV DL, 80H                ; drive number
INT 13H
JC Unsupported
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top