Question

Amis, je travaille sur un simulateur architectural interne qui est utilisé pour simuler l'effet de synchronisation d'un code exécuté sur différents paramètres architecturaux comme le noyau, la hiérarchie de mémoire et les interconnexions.

Je travaille sur un module prend la trace réelle d'un programme en cours d'exécution à partir d'un émulateur comme "Pintool" et "Qemu-linux-user" et alimenter cette trace au simulateur.

Jusqu'à présent, mon approche était comme ceci: 1) Prenez objdump d'un exécutable binaire et analysez ces informations. 2) Maintenant, l'émulateur doit simplement me nourrir un pointeur d'instructions et d'autres informations comme la charge-adresse / le magasin-address.

Ces approches ne fonctionnent que si le contenu du programme est connu.

Mais maintenant, j'essaie de prendre des traces d'un exécutable en cours d'exécution en haut d'un navire Linux standard. Le problème est maintenant que l'image du noyau de base ne contient pas le code pour LKM (modules de noyau chargé). Les démons ne sont pas non plus connus lors du démarrage d'un noyau.

Ainsi, mon approche de cette solution est: 1) Utilisez Qemu pour imiter une machine. 2) Lorsqu'une instruction est rencontrée pour la première fois, je vais l'analyser et enregistrer ces informations. pour plus tard. 3) Créez une fonction d'assistance qui envoie l'adresse IP, chargez / stocker lorsqu'une instruction est exécutée.

Je suis coincé dans Step2. Comment faire la différence entre les différents processus de Qemu qui n'est qu'un émulateur et ne sait rien du système d'exploitation invité ??

Je peux modifier le planificateur du système d'exploitation invité, mais je ne suis vraiment pas en mesure de comprendre la voie à suivre.

Désolé si la question est très longue. Je sais que j'aurais pu résumer une partie, mais j'ai estimé qu'une partie de celle-ci donne une explication du contexte du problème.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top