Autor Thema: externe funktionen problem  (Gelesen 5190 mal)

drccpp

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« am: 19. May 2005, 23:01 »
hallo,
ich übe zur Zeit "Mischcode" schreiben, d.h. einen Kernel mit nasm und gcc.
Ich kann jetzt schon in c geschriebene functs aus asm aufrufen. Aber umgekehrt ist ein Problem:
GCC ruft eine falsche Adresse auf.
Wenn ich in einem nasm-code zum beispiel schreibe

...
global  _setcursor
_setcursor:
...

und im c-code:

..
extern void setcursor(int x, int y);
..
setcursor(6, 2);
..

in der Map-Datei steht dann etwa:

0x7e80      _setcursor

aber der aufruf aus der c-datei heraus wird assembliert in

call 0x7e9a

das sind 0x1a bytes weiter vorne.  :(
Wie kommt das?
wie kann ich das umgehen?

danke
danny

ps:
ist mein erster beitrag hier!   :D

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #1 am: 19. May 2005, 23:22 »
hast du vielleicht irgendwo in der asm-datei ein org 0x**** stehen? ich hab zwar keine ahnung ob das daran liegen kann, aber probieren kann mans ja ^^
\\o
o//
\o/

drccpp

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 20. May 2005, 11:53 »
HI,

nein das ist nicht der Fall. (das würde übrigens einen nasm-fehler erzeugen)
Nein, Es war etwas ganz anderes, ich habs schon gefunden, sorry  :oops:  :lol:

ich hab neben djgpp noch dev-c++ installiert und in der path variable an erster stelle den bin-pfad zu der von dev-cpp.
d.h. windows nimmt immer den gcc von dev-cpp statt von djgpp
(warum ich das überhaupt so hatte erklär ich ein andern mal!)
jetzt hab ichs umgeändert, und es geht wieder normal.

Jetzt würde ich nur noch gerne erfahren wie man in gcc parameter von rechts noch links aufn stack pushen lässt. In der doc steht nur stdcall und cdecl, welche sich nur auf die stackanpassung nach dem funktionensaufruf auswirken.

drccpp

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 20. May 2005, 13:50 »
Also ich wollte eigentlich c++ coden. Weil das nicht so umständlich wie c ist (in verschiedenen hinsichten), auf die klassen oder oop lege ich garkeinen großen wert.
Aber als ich die cpp datei kompilieren wollte kam von gcc irgendwas mit installation error cc1plus... was auch imma.
Also hab ich versucht g++ zu nehmen, welchen ich aus dev-cpp entnahm.

Ziemlich doof  :oops:  ich weiß!!

gruß
danny

 

Einloggen