Guten Abend
Ich habe ein Problem bei der KOmbination C/ASM. Wenn ich in den C Source eine eigene ASM Funktion einbaue, wird diese Funktion korrekt "verarbeitet", jedoch nicht die C-Funktionen wie z.B. strlen(), printf(),..
Welche Datei ausser den .o aus dem C uind ASM Source muss ich noch dazulinken, dass auch diese Funktionen funktionieren?
MfG
Nixkönner
C und Assembler
Re: C und Assembler
Zeig mal bitte einen Beispiel Code, weil ich dein Problem nicht so ganz verstehe.
Re: C und Assembler
Ich habe eine C-Source Datei, welche eine Funktion aus einer ASM Source Datei nützt. Beide Dateien wurden entsprechend compiliert, wenn ich sie mit ld linken will erhalte ich
Test.o(.text+0x50): undefined reference to `strlen'
und weitere Fehlermeldungen mit printf und exit in dem Stil.
Welche Datei muss ich noch linken damit strlen, printf usw verwendet werden können?
C-Source:
#include <stdio.h>
#include <string.h>
extern myfunc();
int main(int *argc, char *argv[])
{
printf("Willkommen
");
myfunc();
printf("Funktion ausgefuehrt
");
c_func();
printf("C-FUnktion ausgefuehrt
");
exit();
}
ASM-Source:
global _myfunc
_myfunc:
push ebp
mov ebp,esp
sub esp,0x40
mov ebx,[ebp+8]
mov esp,ebp
pop ebp
ret
mfg
nixkönner
P.S. Der Source oben ist nur ein Ausschnitt, das strlen kommt weiter unten vor.
Test.o(.text+0x50): undefined reference to `strlen'
und weitere Fehlermeldungen mit printf und exit in dem Stil.
Welche Datei muss ich noch linken damit strlen, printf usw verwendet werden können?
C-Source:
#include <stdio.h>
#include <string.h>
extern myfunc();
int main(int *argc, char *argv[])
{
printf("Willkommen
");
myfunc();
printf("Funktion ausgefuehrt
");
c_func();
printf("C-FUnktion ausgefuehrt
");
exit();
}
ASM-Source:
global _myfunc
_myfunc:
push ebp
mov ebp,esp
sub esp,0x40
mov ebx,[ebp+8]
mov esp,ebp
pop ebp
ret
mfg
nixkönner
P.S. Der Source oben ist nur ein Ausschnitt, das strlen kommt weiter unten vor.
Re: C und Assembler
Und wie kompilierst du beide Dateien?
Lass dir nicht alles aus der Nase ziehen
Normalerweise erzeugst du mit dem Assembler deiner Wahl ein elf object und linkst es einfach mit "gcc blah.o -o blah".
Zumindest funzt es bei mir so
Lass dir nicht alles aus der Nase ziehen
Normalerweise erzeugst du mit dem Assembler deiner Wahl ein elf object und linkst es einfach mit "gcc blah.o -o blah".
Zumindest funzt es bei mir so