Estoy interesado en desarrollar algún tipo de depurador ring0 kernel-mode para x86-64 en Common Lisp que se cargaría como un módulo kernel de Linux y como prefiero Common Lisp a C en programación general, me pregunto cómo diferentes Common Lisp las implementaciones se adaptarían a este tipo de tarea de programación.¿Es viable escribir un depurador en modo kernel de Linux para Intel x86-64 en Common Lisp, y con qué implementación Common Lisp [s]?
El depurador utilizaría alguna biblioteca externa de desmontaje, como udis86 a través de FFI. Me parece que es más fácil escribir módulos kernel en C ya que necesitan contener las funciones C int init_module(void)
y void cleanup_module(void)
(The Linux Kernel Module Programming Guide), por lo que el código del módulo kernel-land llamaría al código Common Lisp desde C usando CFFI. La idea sería crear un depurador ring0 para Linux de 64 bits inspirado en la idea de Rasta Ring 0 Debugger, que solo está disponible para Linux de 32 bits y requiere teclado PS/2. Creo que la parte más desafiante sería el código del depurador real con puntos de interrupción de hardware y software y el manejo de dispositivos de entrada de video, teclado o USB de bajo nivel. El ensamblaje en línea ayudaría mucho en eso, me parece que en SBCL el ensamblaje en línea se puede implementar usando VOP (SBCL Internals: VOP) (SBCL Internals: Adding VOPs), y este IRC log menciona que ACL (Allegro Common Lisp), CCL (Clozure Common Lisp) y CormanCL tienen LAP (Lisp Programas de ensamblaje). Tanto ACL como CormanCL son propietarios y, por lo tanto, descartados, pero CCL (Clozure Common Lisp) podría ser una opción. La capacidad de construir ejecutables independientes es un requisito también; El SBCL que estoy usando actualmente lo tiene, pero como son imágenes Lisp completas, su tamaño es bastante grande.
Mi pregunta es: es viable para crear un depurador de modo de núcleo ring0 para Intel x86-64 en Common Lisp, con código de bajo nivel implementado en C y/o montaje, y si lo es, lo cual Común Las implementaciones de Lisp para Linux de 64 bits son las mejores para este tipo de empeño, y ¿cuáles son los pros y los contras si hay más de una implementación de Common Lisp adecuada? El esquema también puede ser una opción posible, si ofrece algunos beneficios sobre Common Lisp. Soy consciente de que la gran mayoría de los módulos kernel están escritos en C, y sé que C y x86 se ensamblan lo suficientemente bien como para poder escribir el código de bajo nivel requerido en C y/o ensamblaje. Esto no es un intento de portar kernel de Linux a Lisp (ver: https://stackoverflow.com/questions/1848029/why-not-port-linux-kernel-to-common-lisp), sino un plan para escribir en Common Lisp un módulo de kernel de Linux que se usaría como un ring0 depurador.
Probablemente se podría ejecutar la parte Lisp en un proceso de usuario y simplemente comunicarse con él desde el depurador.. debería ser mucho más fácil de lograr. –
@AlexeyFrunze que podría ser una buena idea, probablemente, hace las cosas mucho más fáciles. – nrz
una downvote, una upvote. me gustaría saber por qué un downvote? – nrz