Autor Thema: C Kernel, ld : Unrrecognized File format  (Gelesen 31760 mal)

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 09. May 2009, 09:45 »
ich habs gelesen nur war mir das etwas zu komplex und ich glaube vielen "neuen" wird es änlich gehen
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #21 am: 09. May 2009, 10:15 »
Es ist halt einfach notwendig/sinnvoll.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 09. May 2009, 11:30 »
Sag uns, was genau unverständlich ist. Dann können wir zusehen, daß es verbessert wird.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 09. May 2009, 12:02 »
zum einen fängt es schon mit dem verlinkten source an, der nicht mehr da ist, man könnte ihn zwar per google etwas änliches finden aber dann würde alles nicht mehr übereinstimmen und dann müsste man wissen was was ist und wie es anzupassen ist
zu dem man braucht MSYS, oder? wenn ja ist es unter dem link nicht zu finden
« Letzte Änderung: 09. May 2009, 12:04 von chris12 »
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 09. May 2009, 12:47 »
hm, jo ich hab meinen Server neu aufgesetzt und nicht alle Backups eingespielt. Ich werd das wohl mal tun.
Dieser Text wird unter jedem Beitrag angezeigt.

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 10. May 2009, 15:54 »
Ich weiß nicht ob, aber du weist das man objcopy vor dem linken benutzen musst! Falls es dich Interresiert so mache ich das mit meinem Kernel mit MinGW:
cd /kernel/
del kernel.hax
nasm -fbin -okernel16.bin kernel16.asm
nasm -felf -okernel32.obj kernel32.asm
gcc -ffreestanding -c -Os -o ckernel.obj kernel.c
ld -shared-ffreestanding -Ttext 0x20200 -o kernel32.bin kernel32.obj ckernel.obj
objcopy -O elf32-i386 kernel32.bin kernel32.bin
dd if=kernel16.bin of=kernel32.bin
rename kernel32.bin kernel.hax
del kernel32.obj ckernel.obj kernel16.bin kernel32.bin
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

berlinermauer

  • Beiträge: 37
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 23. May 2009, 17:32 »
jetzt kommt das warum auch immer?!

C:\gcc\bin\ld.exe: cannot perform PE operations on non PE output file 'c32kernel.bin'.


kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #27 am: 23. May 2009, 18:03 »
Dein ld möchte gern eine COFF-Datei haben und du gibst ihm irgendwas anderes. Wenn dieses irgendwas andere ELF ist, dann solltest du darauf achten, dass du nicht nur den Crosscompiler, sondern auch den passenden ld aus den Cross-binutils benutzt.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

berlinermauer

  • Beiträge: 37
    • Profil anzeigen
Gespeichert
« Antwort #28 am: 23. May 2009, 18:37 »
Meine Routine ist so :

@echo off
nasm -f bin -o kernel16.bin kernel16.asm
REM nasm -f aout -o kernel32.obj kernel32.asm
nasm -f elf -o kernel32.obj kernel32.asm

copy kernel.c C:\gcc\bin\kernel.c
copy link.txt C:\gcc\bin\link.txt
copy kernel32.obj C:\gcc\bin\kernel32.obj

pause
C:\gcc\bin\gcc.exe -ffreestanding -c -Os -o ckernel.obj kernel.c
C:\gcc\bin\objcopy.exe -O elf32-i386 kernel32.obj kernel32.obj
C:\gcc\bin\ld.exe -T link.txt -o c32kernel.bin

copy C:\gcc\bin\c32kernel.bin c32kernel.bin

del /f /q C:\gcc\bin\kernel.c
del /f /q C:\gcc\bin\link.txt
del /f /q C:\gcc\bin\kernel32.obj
del /f /q C:\gcc\bin\c32kernel.bin

copy kernel16.bin+c32kernel.bin kernel.bin
pause


was kann daran falsch sein?

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #29 am: 23. May 2009, 18:50 »
Welchen Kompiler benutzt du denn nun? mingw? Oder den von PorkChicken?

Und welches Format spuckt dein gcc aus? (Kannst du mit objdump -h nachsehen)

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #30 am: 23. May 2009, 19:42 »
Seh ich das richtig, dass du immer noch in link.txt die Dateien kernel32.obj und ckernel32.obj als Input angibst?

Das hier sieht falsch aus:
nasm -f elf -o kernel32.obj kernel32.asm
Der MinGW kann kein ELF. -f win32 ist glaub ich richtig (zweite Wahl ist glaub ich -f coff).


C:\gcc\bin\objcopy.exe -O elf32-i386 kernel32.obj kernel32.obj
Du darfst unter MinGW keine Dateien, die du noch weiterverarbeiten willst, in ELF konvertieren. Zumindest würde dieser Befehl das machen.
Sowas solltest du (wenn überhaupt) erst am Ende machen. Oder wolltest du die Datei ins COFF-Format konvertieren? Das ist hoffentlich nicht nötig, wenn du NASM mit dem richtigen Format aufrufst.
« Letzte Änderung: 23. May 2009, 19:43 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

berlinermauer

  • Beiträge: 37
    • Profil anzeigen
Gespeichert
« Antwort #31 am: 26. May 2009, 10:33 »
Also das einzigste was nicht funtzt ist das ld'en

das objcopy hab ich jetzt mal raus.

ckernel.obj:     file format pe-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000030  00000000  00000000  000000b4  2**2
                  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000000  2**2
                  ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000000  2**2
                  ALLOC
  3 .rdata        00000018  00000000  00000000  000000e4  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA

das ist die ausgabe von gcc

aber irgendwie gehts nicht, da er meint dass die ausgabe kein PE Output File wäre.

link.txt OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x10200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #32 am: 26. May 2009, 11:40 »
Dann gib mal kein OUTPUT_FORMAT an, sondern lass den linker ne PE-Datei ausgeben. Die kannst du dann mit objcopy in eine Binärdatei umwandeln.
Dieser Text wird unter jedem Beitrag angezeigt.

berlinermauer

  • Beiträge: 37
    • Profil anzeigen
Gespeichert
« Antwort #33 am: 26. May 2009, 19:50 »
ich hab jetzt ma das objcopy noch weggelassen und jetzt kommt was ganz anderes :

kernel32.obj: In function `start':
kernel32.asm:(.text+0x1): undefined reference to `main'

komischerweiße?!

Kernel32.asm :
[Bits 32]
extern _main
global start
global _EnableA20Gate

start:

call _main

STOP:
jmp STOP

;#######################################################################


Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #34 am: 26. May 2009, 20:14 »
Probier mal ein section .text am Anfang der kernel32.asm
Dieser Text wird unter jedem Beitrag angezeigt.

berlinermauer

  • Beiträge: 37
    • Profil anzeigen
Gespeichert
« Antwort #35 am: 26. May 2009, 22:00 »
habs vor Bits 32 versucht und dannach, immer noch der Fehler

berlinermauer

  • Beiträge: 37
    • Profil anzeigen
Gespeichert
« Antwort #36 am: 22. June 2009, 21:46 »
sry für den push weiß aber echt nicht was ich machen kann

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #37 am: 22. June 2009, 22:13 »
hast du es jetzt schon mal mit dem CrossCompiler versucht, wenn nicht lasss dir doch von einem forenmitglied einen erstellen, den du dir dann downloaden kannst, dann nur noch pathvariable anpassen :-D
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #38 am: 22. June 2009, 22:53 »
Ohja, wer erstellt hier den individuelle Cross Compiler? Bräucht auch einen ^^

Es ist einer im Wiki: http://lowlevel.brainsware.org/wiki/index.php/Crosscompiler_f%C3%BCr_Windows

Ansonsten könntest du den kompletten Quelltext mit Assembler-/Compiler-Aufrufen hochladen, und hoffen, dass jemand den Fehler findet.
Dieser Text wird unter jedem Beitrag angezeigt.

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #39 am: 23. June 2009, 13:22 »
Die beste möglichkeit wäre ja auf deinem server oder webspace, falls vorhanden eine zip hochzuladen und wir schauen ob es bei uns funktioniert, dann könnte dir unsere konfiguration vieleicht helfen :-D
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

 

Einloggen