Sto lavorando su un piccolo bootloader per scopi di apprendimento. Sono disponibili specifiche/informazioni sulla dimensione dello stack (gratuita) necessaria per una chiamata di interrupt bios?Stack richiesta per chiamata interruzione bios
risposta
Da http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf ("Convenzioni di chiamata" a pagina 3), sembra che la chiamata del BIOS possa utilizzare fino a 1024 byte di spazio di stack. Il mio googling non ha trovato altre fonti.
prima di immettere il gestore di interrupt, tutti i registri vengono inviati allo stack insieme all'indirizzo di ritorno remoto, sommano le dimensioni dei registri e aggiungono lo spazio necessario per memorizzare l'indirizzo di ritorno per ottenere la dimensione minima dello stack.
prendere atto che avrete bisogno di un po 'più spazio se si sta spingendo più dati nello stack, mentre nel gestore di interrupt
Ho notato che se si utilizza int 0x13 si dovrebbe avere uno stack che è almeno 4096 byte. I BIOS moderni hanno spesso un gestore int 0x13 compatibile con AHCI e dal momento che AHCI è piuttosto complicato il BIOS int 0x13 richiede molto spazio nello stack.
Nel mondo perfetto il BIOS dovrebbe avere il proprio stack, ma molti BIOS fanno affidamento sullo stack fornito.
La semplice risposta è che lo stack che il BIOS utilizzava per effettuare chiamate di interrupt (incluso l'int 13h per caricare il settore di avvio dall'unità flash USB) prima di caricare il settore di avvio è sufficiente per l'utilizzo del settore di avvio.
La risposta felice è che gli interrupt BIOS (ad eccezione del PCI più recente gonfio) sono progettati per l'esecuzione in uno spazio minimo in modo non c'è bisogno di impostare una pila nel settore di avvio.
- 1. 0xffff0 e il BIOS
- 2. Scrivi il mio BIOS
- 3. Interruzione GDB su chiamata funzione oggetto
- 4. Xcode - Traccia stack di chiamata su assert?
- 5. x64 convenzione di chiamata (stack) e varargs
- 6. Stack overflow dalla chiamata ricorsiva in Lisp
- 7. Numero pagina in BIOS interrompe
- 8. Chiamata non gestita causando overflow dello stack
- 9. Richiedi richiesta Stack iniziatore nella scheda Rete
- 10. C'è un modo per stampare la traccia dello stack su richiesta?
- 11. Lettura dello stack stack per iOS Webkit
- 12. L'incapsulamento per interruzione di eredità?
- 13. Quali informazioni carica il BIOS nella RAM?
- 14. Come interrogare il BIOS usando GRUB?
- 15. Richiesta di chiamata AJAX utilizzando jQuery
- 16. Automatizza GDB per stampare lo stack frame in un punto di interruzione particolare
- 17. open() richiesta file di chiamata di sistema
- 18. Come ignorare le chiamate di interruzione durante il debug di un bootloader/bios con gdb e QEMU?
- 19. GCC MIPS-32 Convenzioni di chiamata/Definizione frame stack
- 20. Oggetto assegnato allo stack C++, chiamata al distruttore esplicita
- 21. C# Ottieni metodo di chiamata senza traccia stack
- 22. Windbg Set condizionali punti di interruzione che dipende Stack di chiamate
- 23. Arresto forzato o interruzione per errore
- 24. Stack Trace per l'accesso .NET
- 25. L'indirizzo 0xFFFFFFF0 è cablato per la ROM del BIOS di sistema?
- 26. Confusione per principianti sullo stack x86
- 27. C# problema di debug: Nessun simboli vengono caricati per qualsiasi chiamata stack frame
- 28. C'è un modo per controllare le dimensioni dello stack disponibili prima della chiamata ricorsiva? (C#)
- 29. Traccia stack completo per i metodi intercettati sul sito di chiamata in Unity
- 30. Stack Trace: su System.Web.HttpServerUtility.ExecuteInternal() || Errore durante l'esecuzione della richiesta figlio per il gestore in MVC 2.0