Jestem zainteresowany rozwijaniem pewnego rodzaju debuggera w stylu jądra ring0 dla x86-64 w Common Lisp, który byłby załadowany jako moduł jądra Linuksa i jak wolę Common Lisp do C w ogólnym programowaniu, zastanawiam się, jak różne są wspólne Lisp implementacje pasowałyby do tego rodzaju zadania programistycznego.Czy jest możliwe napisanie debuggera trybu jądra Linux dla Intel x86-64 w Common Lisp i z jakim implementacją Common Lisp [s]?
Do debuggera wykorzystano zewnętrzną bibliotekę do demontażu, taką jak udis86 za pośrednictwem jakiegoś FFI. Wydaje mi się, że najłatwiej jest napisać moduły jądra w C, ponieważ muszą zawierać funkcje C int init_module(void)
i void cleanup_module(void)
(The Linux Kernel Module Programming Guide), więc kod modułu jądra wywoła kod Common Lisp z C za pomocą CFFI. Pomysł polegałby na stworzeniu debora typu ring0 dla 64-bitowego systemu Linux zainspirowanego ideą Rasta Ring 0 Debugger, który jest dostępny tylko dla 32-bitowego systemu Linux i wymaga klawiatury PS/2. Myślę, że najtrudniejszą częścią byłby faktyczny kod debuggera ze sprzętowymi i programowymi punktami przerwania oraz niskopoziomowym sterowaniem urządzeniami wideo, klawiaturowymi lub wejściowymi USB. Montaż w trybie Inline bardzo by mi w tym pomógł, wydaje mi się, że w wbudowanym zestawie SBCL można zaimplementować za pomocą VOP (SBCL Internals: VOP) (SBCL Internals: Adding VOPs), a ten IRC log wspomina, że ACL (Allegro Common Lisp), CCL (Clozure Common Lisp) i CormanCL mają LAP (Lisp Programy montażowe). Zarówno ACL, jak i CormanCL są zastrzeżone, a zatem odrzucone, ale CCL (Clozure Common Lisp) może być jedną z opcji. Konieczna jest także możliwość budowania samodzielnych plików wykonywalnych; SBCL, którego obecnie używam, ma to, ale ponieważ są to całe obrazy Lisp, ich rozmiar jest dość duży.
Moje pytanie brzmi: jest to opłacalne, aby utworzyć debugger ring0 trybu jądra Intel x86-64 w Common Lisp, kod niskiego poziomu realizowanego w C i/lub zespołu, a jeśli jest, co wspólne Implementacje Lisp dla 64-bitowego systemu Linux najlepiej nadają się do tego typu przedsięwzięć, a jakie są plusy i minusy, jeśli istnieje więcej niż jedna odpowiednia implementacja Common Lisp? Schemat może być jedną z możliwych opcji, jeśli oferuje pewne korzyści w porównaniu z Common Lisp. Doskonale zdaję sobie sprawę, że znakomita większość modułów jądra jest napisana w języku C, a ja znam układ C i x86 na tyle dobrze, aby móc napisać wymagany kod niskiego poziomu w C i/lub złożeniu. Nie jest to próba przeniesienia jądra Linuksa do Lisp (patrz: https://stackoverflow.com/questions/1848029/why-not-port-linux-kernel-to-common-lisp), ale plan napisania w Common Lisp modułu jądra Linux, który byłby używany jako debugger ring0.
Prawdopodobnie może uruchomić Lisp udział w procesie obsługi i po prostu z nim komunikować z debuggera.. Powinno być znacznie łatwiejsze do osiągnięcia: –
@AlexeyFrunze To może być dobry pomysł, pewnie czyni to o wiele łatwiejszym – nrz
Jeden downvote, jeden uptoot.Chciałbym wiedzieć, dlaczego downward? – nrz