Domanda

Amici, sto lavorando a un simulatore architettonico interno che viene utilizzato per simulare l'effetto di temporizzazione di un codice in esecuzione su diversi parametri architettonici come Core, Gerarchia di memoria e interconnessioni.

Sto lavorando a un modulo prende la traccia effettiva di un programma di esecuzione da un emulatore come "Pintool" e "Qemu-Linux-User" e alimenta questa traccia al simulatore.

Fino ad ora il mio approccio era così: 1) Prendi Objdump di un eseguibile binario e analizza queste informazioni. 2) Ora l'emulatore deve semplicemente darmi un po 'di istruzioni e altre informazioni come Address/Store-Dressing.

Tali approcci funzionano solo se il contenuto del programma è noto.

Ma ora ho cercato di prendere tracce di un eseguibile in esecuzione su un kernel Linux standard. Il problema ora è che l'immagine del kernel di base non contiene il codice per LKM (moduli del kernel carico). Anche i demoni non sono noti quando si avvia un kernel.

Quindi, il mio approccio a questa soluzione è: 1) Usa QEMU per emulare una macchina. 2) Quando si incontra un'istruzione per la prima volta, lo analizzerò e salverò queste informazioni. per dopo. 3) Creare una funzione helper che invia l'IP, caricamento/archivia l'indirizzo quando viene eseguita un'istruzione.

Sono bloccato nel Step2. Come faccio a distinguere tra i diversi processi da QEMU che è solo un emulatore e non sa nulla del sistema operativo ospite ??

Posso modificare lo scheduler del sistema operativo ospite, ma non sono davvero in grado di capire la via da seguire.

Scusa se la domanda è molto lunga. So che avrei potuto astrarre una parte, ma ho sentito che una parte di essa fornisce una spiegazione del contesto del problema.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top