Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - MrPerfekt

Seiten: [1] 2
1
Lowlevel-Coding / Re: c++ linken problem
« am: 16. May 2010, 11:19 »
sorry sorry
Ich hatte in Letzter Zeit viel stress.
Aber jetzt um einiges mehr Zeit.
Ich nehme nun einmal den guten ratschlag an und probiere das elf32 format in meinen Bootloader zu integrieren.
Ich melde mich ob es funktioniert hat.
Danke forerst einmal.
2
Lowlevel-Coding / Re: c++ linken problem
« am: 14. May 2010, 08:08 »
könnt ihr mir fl noch sagen warum ich mit dieser datei nichts anfangen kann
bzw wie ich es schaffe das der startpunkt mein 1. befehl ist

hab schon allemöglichen optionen ausprobiert und fiel gegoogelt
3
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 20:53 »
sorry wenn ich nocheinmal störe
irgentwie kann ich mit dem file dass dabei rauskommt nichts anfangen
4
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 18:49 »
ok irgentwie doch noch nicht
ich bekomme danach eine datei raus mit der ich nichts anfangen kann
weder mit objcopy noch direct als bin datei
5
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 17:43 »
danke danke danke
die header zu interpretieren versuche ich dann in meinem loader
danke nocheinmal

mrPerfket
6
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 17:38 »
asoo
jetzt verstehe ich
jetzt wird mir einiges klar
aber wie kann ich so linken das eine reine binare datei datei übrich bleibt
7
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 17:35 »
aber jetzt einmal angenommen mein bootloader funktioniert
(hat er ja bei programmen die nicht gelinkt werden gemacht)
dann müsst ja irgentwo noch ein fehler sein
8
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 17:30 »
ok dann kurz einen bootloader:
[ORG 07C00h] ;ab hier Startet das Programm
[bits 16]

jmp 0000h:start


start:
        ; Update the segment registers
mov ax, cs
        mov ds, ax
        mov es, ax

call print

;================================================================
;Lade das weitere Programm in den Arbeitsspeicher
;================================================================
reset:                      ; Reset the floppy drive
mov ax, 0           ;
mov dl, 0           ; Drive=0 (=A)
int 13h             ;
jc reset            ; ERROR => reset again


read:
mov ax, 0x0050 ; ES:BX = 0050:0000
mov es, ax ;
mov bx, 0x0000 ;

mov ah, 2 ; Load disk data to ES:BX
mov al, 5 ; Load 5 sectors
mov ch, 0 ; Cylinder=0
mov cl, 1 ; Sector=1
mov dh, 0 ; Head=0
mov dl, 0 ; Drive=0
int 13h ; Read!

jc read ; ERROR => Try again

;================================================================
;Das weitere Programm wurde in den Arbeitsspeicher geladen
;Schalte in den Protected Mode
;================================================================
[BITS 16]
cli ; Interrupts ausschalten
lgdt [gdtr] ; GDT Pointer laden

mov eax,cr0 ; In PMode wechseln, indem das niedrigste
or al,1 ; Steuerungsbit von cr0 geändert wird
mov cr0,eax ; muss über Umweg über ein anderes Register gemacht werden

jmp codesel:PMode ; FarJump zu einer 32-Bit PMode Funktion

[BITS 32]
PMode:
mov ax,datasel ; Segmentregister laden
mov ds,ax
mov ss,ax
mov esp,0x90000 ; Stack aufsetzen

mov eax, 1 ; Zeile
mov ebx, 0 ; Spalte
call print32

jmp 0x0500+512
;================================================================
;Das Programm ist nun im Protected Modus
;GDT
;================================================================
gdtr: ; Desktiptortabelle
dw gdt_end-gdt-1 ; Limit
dd gdt ; Basisadresse
gdt:
dd 0,0 ; Null-Deskriptor
codesel equ $-gdt
dw 0xFFFF ; Segmentgrösse 0..15
dw 0x0000 ; Segmentadresse 0..15
db 0x00 ; Segmentadresse 16..23
db 0x9A ; Zugriffsberechtigung und Typ
db 0xCF ; Zusatzinformationen und Segmentgrösse 16...19
db 0x00 ; Segmentadresse 24..31
datasel equ $-gdt
dw 0xFFFF ; Segmentgrösse 0..15
dw 0x0000 ; Segmentadresse 0..15
db 0x00 ; Segmentadresse 16..23
db 0x92 ; Zugriffsberechtigung und Typ
db 0xCF ; Zusatzinformationen und Segmentgrösse 16...19
db 0x00 ; Segmentadresse 24..31
gdt_end:
;================================================================
;GDT ende
;================================================================

;================================================================
; int2string (schreibt eax in den string)
; eax = number
;================================================================
[bits 16]
int2string:
PUSHA
LEA edi,[string]
MOV esi, edi
;MOV eax, 479
MOV ecx, 0x000A
startLoop:

MOV byte [edi], '0'
XOR edx,edx
DIV ecx

ADD [edi],edx
;MOV byte [edi], ebx
;ADD [edi],ebx

INC edi
CMP eax,0
JNE startLoop
MOV byte [edi],0
DEC edi
; vertausche die Richtung
switchLoop:
MOV ah, [esi]
MOV al, [edi]

MOV [esi], al
MOV [edi], ah

DEC edi
INC esi
CMP edi,esi
JA switchLoop

POPA
RET
;================================================================
; end int2string
;================================================================

;================================================================
; Print 16
;================================================================
string DB "Lade Black Window 0.0.0.0.0.0.0.6.0",0
print:
PUSHA
LEA bx,[string]
startOutLoop:
CMP byte [bx],0
JE ende
MOV ah,0eh
MOV al,[bx]
INT 10h
INC bx
JMP startOutLoop
ende:

MOV bh, 0
MOV ah, 03h
INT 10h
MOV ah, 02h
MOV dl, 0
INC dh
INT 10h
POPA
RET
;================================================================
; end Print
;================================================================

;================================================================
; Print 32
; eax = Line
; ebx = Position
;================================================================
[bits 32]
string32 DB "32 Bit Protected Modus geladen                ",0
print32:
pusha
mov edx,0x50
mul edx
add eax,ebx
mov edx,0x2
mul edx
add eax,0xb8000
lea edx,[string32]

.paintloop:
mov cl,[edx]
mov byte [eax],cl
inc edx
add eax,0x2
cmp byte [edx],0
jne .paintloop

popa
ret
[bits 16]
;================================================================
; end Print
;================================================================



;================================================================
;Schreibe die Bootloaderidentifikation
;================================================================
times 440-($-$$) db 0
dq 0x00000000 ;Optional Disk Signatur
dw 0x0000 ;Usually Nulls
  ;Table of primary partitions
times 510-($-$$) db 0
bootloaderIdentifikation dw 0x0AA55
;================================================================
;ende Schreibe die Bootloaderidentifikation
;================================================================


aber wie kann ich den mit grub ersetzten
da müsste ich mir immerwieder einen grub auf mein img laden
9
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 17:24 »
ok ich habe vielleich so begonnen
aber was herausgekommen ist wirst du nigenst im internet finden
(auser die professorische gdt)
(idt habe ich noch nicht implementiert)
da ich alles selbst geschrieben habe

edit: So wie das aussieht baut ld aber da eine ELF-Datei, oder? Kannst du ja per objdump nachprüfen. Wenn du kein Dateiformat im Bootloader implementiert hast, tut das natürlich nicht. moment
noch einmal langsam
was meinst du
10
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 17:19 »
der bootloader funktioniert
ich habe bereits ein programm laden können welches nicht gelinkt worden ist

mein bootloader unterstützt noch kein dateiformat
das ist der grund warum ich meinen eigenen verwende
ok nicht nur das
mich interessiert es wie alles funktioniert
11
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 17:14 »
Den hast du wahrscheinlich vergessen extern "C" zu deklarieren, siehe auch wiki. Ansonsten hast du die Funktion vergessen zu definieren oder linkst die entsprechende Objektdatei nicht hinzu.
Genau dass war mein fehler danke
aber es funktioniert noch nicht ganz
Hier nochmal eine zusammenfassung:
- Mein Bootloader Ladet ein paar sektoren in den Arbeitsspeicher
- Mein Bootloader Schaltet in den 32bit protected mode
- Mein Bootloader springt an das erste byte meines geladenen programmes
== Bis hier funktioniert alles danach nichts mehr
- das programm sollte 2 zeichen schreiben
- das programm ruft eine methode aus einem 2.ten programm auf
- diese methode hängt sich in einer endlosschleife auf

Ich compilliere mit
g++ -fno-exceptions -fno-rtti -Wall -m32 -Iinclude $i -c -o $olinke mit
ld -static -melf_i386 -e BootPoint -o $bin/$entrypoint -Ttext 0x8000 $bin/*.ound füge so mein programm an meinen bootloader
cat $bin/$boot.bin $bin/$entrypoint.bin > $bin/out.bin

Mein haupt cpp programm:
#include "loader.h"
#include "kernel.h"
void BootPoint()
{
int x = 1, y = 0;
char*videoPosition;
videoPosition = (char*)(0xB8000 + (y * 80 + x)*2);
*videoPosition = '=';
*((char*)(0xB8000)) = '=';
KernelMain();
}
und die dazugehörige .h datei
#ifndef _loader_h_
#define _loader_h_

extern "C" void BootPoint();
#endif // ifndef _loader_h_
12
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 15:07 »
der tipp mit dem kompilieren hat geholfen
aber den startpunkt findet er trotzdem noch nicht
hättet ihr da auch noch eine idee

/usr/bin/ld.bfd.real: warning: cannot find entry symbol BootPoint; defaulting to 0000000008048094
13
Lowlevel-Coding / Re: c++ linken problem
« am: 13. May 2010, 12:31 »
asoo entschuldige das habe ich fergessen
usr/bin/ld.bfd.real: warning: cannot find entry symbol BootPoint; defaulting to 0000000008048074
/home/andreas/Desktop/BlackWindow/bin/kernel.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
/home/andreas/Desktop/BlackWindow/bin/loader.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
14
Lowlevel-Coding / c++ linken problem
« am: 13. May 2010, 10:55 »
hallo
Könnt ihr mir sagen was ich beim Linken falsch mache
ich habe eine Methode BootPoint und möchte diese als einstiebspunkt in mein Programm vestlegen

damit linke ich:
ld -static -melf_i386 -e BootPoint -o $bin/$entrypoint $bin/*.o &&
objcopy -R .note -R .comment -S -O binary $bin/$entrypoint $bin/entrypoint.bin || exit 1
15
Softwareentwicklung / Re: Ubuntu: .IMG erkzeugen
« am: 13. May 2010, 09:28 »
ok danke dass hat mir sehr geholfen
nur jetzt verstehe ich virtual box nicht mehr
jetzt nimmt er mir auf einmal mein img aber dafür wirf es einen schweeren systemfehler :D
wie gesagt auf qemu und bochs funktioniert alles
Ein schwerwiegender Fehler ist aufgetreten, und die Ausführung der virtuellen Maschine wurde unterbrochen.
Zusätzliche Informationen zu diesem Fehler suchen Sie bitte in der Community-Sektion auf http://www.virtualbox.org bzw. handeln Sie gemäß Ihres Supportvertrages. Bitte geben Sie die Logdatei VBox.log, den Screenshot VBox.png, den Sie im Verzeichnis /home/andreas/.VirtualBox/Machines/BlackWindow/Logs finden können, sowie eine Beschreibung der Maßnahmen, die zu diesem Fehler führten, weiter. Sie können diese Dateien auch durch Auswahl von Zeige Log... im Menü Maschine des Hauptfensters finden.
Wählen Sie OK, wenn Sie die virtuelle Maschine ausschalten wollen. Wählen Sie Ignorieren, wenn Sie diese für Debugging offen lassen wollen. Zum Debuggen sind spezielle Kenntnisse und Tools notwendig, so dass die empfohlene Aktion hier OK ist.
ich vermute es ist beim aktivieren des 32 bit protected mode

danke für eure hilfe
fl weis jemand auf dieses rätsel auch noch eine lösung

aber forerst schon mal danke
mrPerfekt
16
Softwareentwicklung / Re: Ubuntu: .IMG erkzeugen
« am: 12. May 2010, 22:13 »
ok die Idee dass er der größe entsprechen muss war sehr vielversprechend doch leider tritt bei virtual box der fehler immer noch auf  :-(
die Größe hat funktioniert:
-rw-r--r-- 1 andreas andreas 1,5M 2010-05-12 22:10 out.img
Wie gesagt es ist nur bei virtual box und auch erst seit dem neuen update
17
Softwareentwicklung / Re: Ubuntu: .IMG erkzeugen
« am: 12. May 2010, 19:47 »
dd if=$bin/out.bin of=$bin/out.img bs=1024 count=1440 || exit 0
Kommt dabei wirklich eine 1,44-MB-Datei raus?
Nein kommt nicht nur So gros wie meine binaer Datei ist.
Ich habe jetzt leider nur noch ein paar Minuten zeit aber um 10uhr probiere ich das img auf 1,44MB aufzufüllen und melde mich dann.
zu dem Fehler: Das sagt virtual box:
Die virtuelle Maschine BlackWindow konnte nicht gestartet werden.
Medium '/home/andreas/Desktop/BlackWindow/bin/bootloader.img' is not accessible. Could not open the medium '/home/andreas/Desktop/BlackWindow/bin/bootloader.img'.
VD: error VERR_FILE_NOT_FOUND opening image file '/home/andreas/Desktop/BlackWindow/bin/bootloader.img' (VERR_FILE_NOT_FOUND).
Fehlercode:NS_ERROR_FAILURE (0x80004005)
Komponente:Machine
Interface:IMachine {99404f50-dd10-40d3-889b-dd2f79f1e95e}
Die virtuelle Maschine BlackWindow konnte nicht gestartet werden.
Method GetVRDPServer is not implemented.
Fehlercode:NS_ERROR_NOT_IMPLEMENTED (0x80004001)
Komponente:Machine
Interface:IMachine {99404f50-dd10-40d3-889b-dd2f79f1e95e}


Danke dass ihr euch so bemüht
Danke Danke Danke
MrPerfekt

Ps ich habe vergessen das der MBR bereits gültig erstellt worden ist.
Zumindestens die Bootsignatur auf dem 511 und 512 byte. Der Rest des MBR setzt sich bei mir aus meinem code und nullen zusammen
18
Softwareentwicklung / Re: Ubuntu: .IMG erkzeugen
« am: 12. May 2010, 13:16 »
Ganz tolle Aussage.
Ich will auch ganz viel.

Tut mir leid dass es so kurz geworden ist aber ich habe die schmerzhafte Erfahrung gemacht, dass bei langen Texten niemand zurückschreibt


Also es sollte ein ein Diskettenimmage sein.
Ich habe die binaerdatei und mache daraus ein image und zwar mit diesem befehl:
dd if=$bin/out.bin of=$bin/out.img bs=1024 count=1440 || exit 0
bochs Nimmt dieses image aber virtual box giebt seit einem update einen error aus
19
Softwareentwicklung / Ubuntu: .IMG erkzeugen
« am: 06. May 2010, 20:08 »
Hallo

Ich habe eine bin datei und ubuntu und will eine bootable img datei.
20
Lowlevel-Coding / Re: Protected Modus funktioniert nicht
« am: 30. April 2010, 23:00 »
Naja ich lade in virtual box mit meinem assembler programm das c programm.
Die binärdatei des c programms ist direct an die binärdatei des assembler programmes angehengt.
Das laden funktioniert da ich es bereits mit dem selbigen assembler programm stadt dem c programm probiert habe.
Nur kommt beim laden in virtual box ein schweerer systemfehler.
bitte kann mir jemand helfen
Danke
Seiten: [1] 2

Einloggen