23. November 2024, 00:11
Willkommen
Gast
. Bitte
einloggen
oder
registrieren
.
Hast du deine
Aktivierungs E-Mail
übersehen?
Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Lowlevel
»
Lowlevel
»
Lowlevel-Coding
»
Thema:
Externe functionen aufrufen
« vorheriges
nächstes »
Drucken
Seiten: [
1
]
Autor
Thema: Externe functionen aufrufen (Gelesen 9259 mal)
Shining
Beiträge: 17
Gespeichert
«
am:
07. May 2004, 20:49 »
Externe functionen aufrufen
Also, nehmen wir an, ich habe eine andere asm file zur .obj compiliert.
in der obj datei sind Functionen, die der Kernel aufrufen soll, wie stelle ich dies nun an?
reicht es in der file global _machdiesunddas zu schreiben und die dann im kernel mit call _machdiesunddas aufzurufen?
Oder was muss ich machen? sry, muss mir mal ein gutes buch kaufen
kann mir einer eins empfehlen? *löel*
mfg Shining
Shining
Beiträge: 17
Gespeichert
«
Antwort #1 am:
07. May 2004, 20:50 »
Externe functionen aufrufen
Mist, edit geht nicht ... hab vergessen, die obj file ist natürlich zum kernel gelinkt
TeeJay
Beiträge: 630
Gespeichert
«
Antwort #2 am:
07. May 2004, 22:57 »
Externe functionen aufrufen
Ja es genügt.
Wenn du aber die Funktion in C aufrufst, dann musst du im C-Code den "_" vor der Funktion weglassen. C fügt den beim compilen automatisch hinzu.
----------------------
Redakteur bei LowLevel
chr15
Beiträge: 279
Gespeichert
«
Antwort #3 am:
07. May 2004, 23:07 »
Externe functionen aufrufen
Aber es geht doch auch, wenn man sowohl in C als auch im Assembler den _ weglässt! Also irgendwie verstehe ich das alles nicht mit diesen Unterstrichen. Kann einer mal ne Übersicht geben, wann wie welcher Compiler/Assembler wo einen unterstrich setzt? (Aufruf/Dekleration)?
TeeJay
Beiträge: 630
Gespeichert
«
Antwort #4 am:
08. May 2004, 00:39 »
Externe functionen aufrufen
Beim Compilen von C-Code wird vom Compiler ein "_" vor jede Funktion gehängt.
Angenommen ich habe also die Funktion :
void main();
Wenn ich diese von Asm aus aufrufen möchte, dann schreibe ich:
call _main;
Und wenn ich nun in ASM eine Funktion erstellen will die ich auch von C aus aufrufen kann, dann muss ich ein "_" vor den Funktionsnamen schreiben:
_Function:
Und diese Funktion global setzen mit:
global _Function
In C rufe ich die Funktion dann mit:
Funktion();
auf.
----------------------
Redakteur bei LowLevel
Shining
Beiträge: 17
Gespeichert
«
Antwort #5 am:
08. May 2004, 06:58 »
Externe functionen aufrufen
gibt es auch eine möglichkeit diese difinierte function von anderen programmen aus zu steuern? ohne das sie mitgelinkt werden?
Also ohne sie jetzt an einen Interrupt zu koppeln
chr15
Beiträge: 279
Gespeichert
«
Antwort #6 am:
08. May 2004, 10:16 »
Externe functionen aufrufen
Bei mir kann ich void meine_funktion() auch aufrufen, wenn im Assembler nur
global meine_funktion
meine_funktion:
steht. Was ist das?
TeeJay
Beiträge: 630
Gespeichert
«
Antwort #7 am:
08. May 2004, 11:23 »
Externe functionen aufrufen
ka
möglich das der Compiler das dann noch so ändert.
----------------------
Redakteur bei LowLevel
Another Stupid Coder
Beiträge: 749
Gespeichert
«
Antwort #8 am:
08. May 2004, 11:43 »
Externe functionen aufrufen
Bei meiner gcc version (gcc version 3.3 20030226 (prerelease) (SuSE Linux)) von SuSE 8.2 und auch bei meinem ehemaligen SuSE 9.0 funzt es auch ohne '_'
Shining
Beiträge: 17
Gespeichert
«
Antwort #9 am:
08. May 2004, 12:12 »
Externe functionen aufrufen
Bei mir entstehen aber auch immer probs ^^
Ich hab die obj files erstellt und wollte diese nun linken, nur das prob ist, das die adresse 0x200 in der linkfile bei mir net hinhaut, weis einer, wie ich die richtige herausfinde? 1000 isses nicht, soviel weis ich ^^
mfg Shining
lobmann
Beiträge: 243
Gespeichert
«
Antwort #10 am:
08. May 2004, 12:56 »
Externe functionen aufrufen
beziehst du dich auf das Beispiel von TeeJay? Wenn ja liegt es daran wie gross der 16-BIT Plain Binary Code. der 32-BIT Code fängt ja genau hinter der Datei an also wenn die bin 512 Bytes gross ist dann beginnt der 32-BIT Kernel ab offset 512 (0x200), deshalb werden die Nullbytes hinten drangehangen um ne genaue grösse zu erhalten.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit
kleiner
Beiträge: 131
Gespeichert
«
Antwort #11 am:
08. May 2004, 13:08 »
Externe functionen aufrufen
Also, Du kannst Funktionen aus anderen Programmen nicht normal nutzen. Um das zu erreichen könntest Du z.B. ELF verwenden, und damit die entsprechenden Verbindungen aufbaun und die Funktion die Du so nutzen willst in eine shared library packen. Aber ELF musst Du halt selbst umsetzen und das bedeutet einiges an Arbeit. Der Linuxkernel lädt seine Module z.B. über ELF.
www.HydrixOS.de
Shining
Beiträge: 17
Gespeichert
«
Antwort #12 am:
08. May 2004, 22:16 »
Externe functionen aufrufen
Jain, ich hab die Linkfile aus dem beispiel, jedoch alles in assembler erstellt. Alles zusammen will ich zu dem normalen Kernel linken. Also wenn ich das recht verstehe (ist ja alles 16 bit code) müsste die adresse 0 sein? ist ja in dem sinne der anfang ...
lobmann
Beiträge: 243
Gespeichert
«
Antwort #13 am:
08. May 2004, 22:49 »
Externe functionen aufrufen
Weiss nich genau was du meinst.
Kernel16.bin ist die PlainBinary und liegt als erstes im Speicher, die wird jetz genau auf 512 Bytes vergrössert.
So dahinter liegt jetz kernel32.obj und ckernel.obj zusammengelinkt, aber nur wenn du eine Datei hast wo zuerst die kernel16.bin und direkt folgend kernel32.obj und ckernel.obj steht.
Im Linker Skript sagst du dem Linker halt das kernel32.obj und ckernel.obj ab offset 0x0200 beginnt, das kann natürlich bei dir völlig anders sein vielleicht weil die kernel16.bin grösser als 512 Bytes ist, oder du vielleicht die Dateien so zusammenkopiert hast das kernel32.obj und ckernel.obj nicht genau hinter kernel16.bin stehen
Hoffe ich konnt dir helfen ansonsten kannst du dich ja mal per icq oder mail bei mir melden
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit
Shining
Beiträge: 17
Gespeichert
«
Antwort #14 am:
08. May 2004, 22:54 »
Externe functionen aufrufen
naja das ding ist, ich hab kein ckernel, wie im tut, ich hab den reinen asm kernel und ein paar obj files (memory, system, string etc...) die ich dazu linken möchte, nur funktioniert es nicht so ganz.
lobmann
Beiträge: 243
Gespeichert
«
Antwort #15 am:
08. May 2004, 23:05 »
Externe functionen aufrufen
Ich glaub ich weiss jetz was du meinst das Problem hast du glaub ich mit den _Unterstrichen. Die Unterstriche brauchst du nur wenn du asm funktionen in C aufrufen willst. Weil der C-Compiler jeder Funktion im C-Quelltext ein Unterstrich voranstellt, und wenn der Linker jetz sich die Funktionen zusammensucht findet der die Assembler Funktionen nur wenn ein Unterstrich vorransteht.
Also was eigentlich sagen will der ASM-Compiler macht das halt nich da musst du dann jede Funktion mit dem selben Namen aufrufen wie sie in einem anderen Modul definiert ist.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit
Drucken
Seiten: [
1
]
« vorheriges
nächstes »
Lowlevel
»
Lowlevel
»
Lowlevel-Coding
»
Thema:
Externe functionen aufrufen
Einloggen
1 Stunde
1 Tag
1 Woche
1 Monat
Immer