Pregunta

Amigos, estoy trabajando en un simulador arquitectónico interno que se utiliza para simular el efecto de tiempo de un código que se ejecuta en diferentes parámetros arquitectónicos como el núcleo, la jerarquía de memoria y las interconexiones.

Estoy trabajando en un módulo toma el rastro real de un programa en ejecución de un emulador como "Pintool" y "Qemu-Linux-User" y alimenta este rastro al simulador.

Hasta ahora, mi enfoque era así: 1) Tome objdump de un ejecutable binario y analice esta información. 2) Ahora el emulador tiene que alimentarme con un puente de instrucciones y otra información como la dirección de carga/dirección de la tienda.

Tales enfoques funcionan solo si se conoce el contenido del programa.

Pero ahora he estado tratando de tomar trazas de un ejecutable que se ejecuta encima de un Linux-Kernel estándar. El problema ahora es que la imagen del núcleo base no contiene el código para LKM (módulos de núcleo cargables). Además, los demonios no se conocen al comenzar un núcleo.

Entonces, mi enfoque de esta solución es: 1) Use QEMU para emular una máquina. 2) Cuando se encuentre una instrucción por primera vez, la analizaré y guardaré esta información. Para luego. 3) Cree una función de ayuda que envíe la dirección IP, cargue/almacena cuando se ejecuta una instrucción.

Estoy atrapado en el paso 2. ¿Cómo diferiré entre diferentes procesos de QEMU, que es solo un emulador y no sabe nada sobre el sistema operativo invitado?

Puedo modificar el planificador del sistema operativo invitado, pero realmente no puedo descubrir el camino a seguir.

Lo siento si la pregunta es muy larga. Sé que podría haber abstraído de alguna parte, pero sentí que una parte de ella da una explicación del contexto del problema.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top