Come posso trovare l'inizio di un metodo nativo?

2

Per un progetto di hobby, sto scrivendo un GC e JIT x86. Per il GC, ho bisogno di mantenere le informazioni sul layout dello stack (è un GC preciso), per il quale ho bisogno di essere in grado di scoprire quale metodo è attualmente IP (e ovviamente la catena di chiamata completa). Come puoi fare questo?

La soluzione migliore finora era mantenere un b-tree degli indirizzi iniziali di tutti i metodi jitted, e usarlo per cercare il metodo corrente. Tuttavia, questo sembra un sacco di spese generali. Un'alternativa sarebbe utilizzare BSP per trovare l'indirizzo di ritorno, tornare indietro di alcuni byte e vedere quale indirizzo è stato chiamato. Potrei quindi inserire alcuni dati prima del punto di ingresso. Tuttavia, questo ha il problema che il callee potrebbe non essere un metodo jitted (ci saranno metodi nativi nello stack). In quel caso, i dati prima del metodo sarebbero spazzatura o potrebbero anche non essere memoria valida (in alcuni casi estremi).

Qual è il solito meccanismo di implementazione di questa funzionalità?

    
posta Pieter van Ginkel 13.06.2014 - 19:25
fonte

0 risposte

Leggi altre domande sui tag