Progrämmchen in Bootsektor bringen

Hallöle,

hab mir ein kleines Programm in Asm geschrieben (nichts besonderes darf ja eh iwi nur 512mb groß sein) welches nen Begrüßungstext ausgibt. Nun meine Frage:

1. Wie befördere ich das Programm in den Bootsektor meiner Festplatte noch vor dem Betriebssystem? PS: Hab nur eine Partition C:!

2. Das Programm ist mit dem "alten" Assembler geschrieben, d.h. es funktioniert mit Interrupts. Ich verstehe noch nicht allzuviel von Interrupts und frage mich deshalb, ob das die einzige Methode ist, Funktionen direkt über die CPU ausführen zu lassen ohne Bibliotheken von Windows benutzen zu müssen? Wenn dem so wäre, dann hätte ich doch mit meinem "neueren" masm32 ein Problem, da man ja keine Interrupts mehr benutzt sondern auch auf die Windows-Bibliotheken zugreift, oder hab ich das falsch verstanden?


Hoffe auf Hilfe!

PS: ich würde hier gern auch noch auf meinen anderen Thread verweisen, der bisher noch unbeantwortet ist und mir eine Antwort wirklich wichtig ist : Eigenen Shell-Ordner erstellen

PS2: Ich weiß dass dieses Thema vielleicht nicht genau in dieses Unterforum passt, jedoch haben meine Fragen doch auch etwas mit Windows zu tun deshalb...bitte ich um Verständnis!

Viele Grüße
Gapa
 
1. der Bootsektor ist nur 512Byte groß.

2. Die win-bibliotheken, bzw generell Bibliotheken haben dort nichst zu suchen.

3. int wird eher bei APIs eingesetzt. Normale Funktionsaufrufe werden per call gemacht. entweder call offset um eine funktion des eigenen segmentes aufzurufen, oder call segment:offset für ein segmentübergreifenden Call.

4. Wenn du nur eine Festplatte hast, rate ich davon ab, dessen bootsektor zu überschreiben. Dadurch zerstörst du u.a. dein Dateisystem (bzw einen wichtigen Teil davon). Du kannst ihn mit tools wie rawrite auf eine Diskette kopieren. (unter Linux per dd - vieleicht gibts da ja auch ein win-klon...).
 
@Tenchuu
Ging mir genauso
@Redeagle
Ja gibt es.
ist ua auch bei der IDE Dev-C++ von Bloodsheed enthalten.
 
...

Hallo,

achso dann ist halt der ganze Bootsektor 512b groß^^
wow dann ist Windows aber klein, oder??

Also wenn ich weder int-befehle noch sonstige wie invoke oder so verwenden darf, wie ist es mir dann überhaupt möglich, eine Messagebox zu erstellen??
Welche Funktionen stehen mir denn überhaupt zur Verfügung solange Windows noch nicht geladen ist? Klar kann ich irgend ne Adresse mit call aufrufen, jedoch welche Funktionen gibts überhaupt, die ich dann aufrufen könnte?

Und wieso zerstöre ich damit mein Dateisystem? Prinzipiell ist es anscheinend doch möglich sowas zu machen wenn mich nicht alles täuscht, oder?

Viele Grüße
Gapa
 
Ich gehe bei 512Mb eigentlich von einem Tippfehler aus ;)
http://de.wikipedia.org/wiki/Master_Boot_Record
hat erstmal nichts mit dem eingesetzten OS gemeinsam.

Also, Du kannst natürlich mit dem älteren MASM programmieren (hier im Board gab es schon oft Links zum Thema 16-bit mit MASM), oder mit NASM (damit lässt sich direkt "RAW" Code generieren).

Zu den Interrupts: achte darauf, dass Du nur BIOS Interrupts verwendest, an Funktionen hast Du nur das, was Du selbst definierst ;).

Zum Testen: das Ergebnis mit einem Brennprogramm als IMG "brennen" (also Image erstellen) und in einem Emulator (BOCHS/QEMU/VirtualPC/VMWare) testen (ist ungefährlicher ;) ). Ansonsten hast Du 2 Probleme:
1)winbootloader wird überschrieben (wie startest Du nun Windows? )
2)beim "Überschreiben" könnte was schiefgehen und es werden mehr als 512Bytes überschrieben - ab da besteht eben die Gefahr, dass auch das Dateisystem schaden nimmt (die genaue Struktur von NTFS und FAT habe ich allerdings nicht im Kopf ).
Wenn Du es aber unbedingt machen möchtest: es gibt Hexeditoren (wie http://mh-nexus.de/en/hxd/) mit denen man auch die Festplatte "direkt" editieren kann. Damit sollte es auch möglich sein, die ersten 512Bytes mit dem gewünschten Inhalt zu überschreiben.
 
Also wenn ich weder int-befehle noch sonstige wie invoke oder so verwenden darf, wie ist es mir dann überhaupt möglich, eine Messagebox zu erstellen??
wie willst du das ohne betriebsystem und in 512 byte realisieren?

Welche Funktionen stehen mir denn überhaupt zur Verfügung solange Windows noch nicht geladen ist? Klar kann ich irgend ne Adresse mit call aufrufen, jedoch welche Funktionen gibts überhaupt, die ich dann aufrufen könnte?
bestenfalls die vom bios, sonst ist ja nichts vorhanden

Zu den 512 bytes: die reichen für deine zwecke nur, um zu einer anderen stelle zu springen. auch bootloader wie grub stehen dort nicht vollständig drin, sondern werden nur von dort gestartet.
 
Zurück
Oben