Heute musste ich relativ viel mit GDB (GNU Debugger) hantieren, der zusammen mit QEmu ein echt wertvolles Tool darstellt.
Unter anderem geht es um die Frage, an welcher Stelle GRUB2 (der Bootloader), bzw. ein Modul, an dem ich gerade arbeite hängt (und im zweiten Schritt, warum).
Also GRUB2 in QEmu geladen, der mit GDB-Hook ausgestattet wurde (-s -S flags), gdb drangehängt, kernel.elf als Symboltabelle hergenommen (0x8200 ist in meinem Fall die Ladeadresse), das Modul für die Symbole in GDB geladen (set debug=modules, insmod - die letzte genannte Adresse ist in der Regel der gesuchte Wert) und durchgesteppt. und gesteppt. und gesteppt.. So ein Singlestepper kann ganz schön langweilig sein, der geht wirklich jeden einzelnen Befehl durch und nexti (also nicht jeden Sprung mitnehmen) war nicht detailliert genug. Da QEmu hängt, sobald das Problem auftritt, muss sich das doch irgendwie automatisieren lassen.
Und ja, es geht:
set pagination off
while 1 == 1
stepi
end
"pagination off" ist sinnvoll, weil GDB sonst alle 25 Zeilen (oder wieviel auch immer eine seite sind) nachfragt, ob man sich den Kram nicht erstmal durchlesen will. Für "1 == 1" gibt es vielleicht auch noch was kürzeres, halt irgendein "true", was auch immer GDB darunter versteht ("true" könnte sogar funktionieren, hab ich nicht probiert)
Übrigens hängt mein Modul in __udivdi3 - das kommt aus libgcc und wickelt elementare Mathematik ab, nämlich die Division und scheint an einer Division durch 0 zu scheitern - wie auch immer diese zustande kommt.
Nachdem ich im letzten Eintrag angemerkt habe, womit ich zu kämpfen hatte, hier die Lösung: gcc -mregparm=3 ist eine nette Möglichkeit, in stand-alone Code dafür zu sorgen, dass der Code ein wenig kleiner und schneller wird. Allerdings muss der Code a
Tracked: Feb 25, 20:04
Habe ich schonmal Qemu über den grünen Klee gelobt? Nein? Dann wird es höchste Zeit dafür:Wie letztens schon einmal erwähnt, ist Qemu zusammen mit einem Debugger (GDB) eine super Möglichkeit, Code zu singlesteppen, an den man sonst nicht so leicht r
Tracked: Apr 08, 21:36