gcc c e assembly: riferimento non definito a funzione
Inviato: domenica 24 maggio 2015, 16:58
Ho un problema a compilare un semplice programma in c che dovrebbe chiamare una funzione scritta in assembly 32bit.
Quando do il comando "nasm -f elf32 -g --prefix _ str.asm -o str.o" questa parte viene compilata correttamente,
ma quando provo a dare "gcc -g -m32 str.c str.o -o str" la risposta è:
/tmp/ccfuiXrQ.o: nella funzione "main":
/home/nic/Documenti/1415/ACE/1906/str.c:13: riferimento non definito a "astrcpy"
collect2: error: ld returned 1 exit status
Non riesco a saltarci fuori, qualcuno sa darmi una mano?
La parte di c è la seguente:
mentre l'assembly è:
Quando do il comando "nasm -f elf32 -g --prefix _ str.asm -o str.o" questa parte viene compilata correttamente,
ma quando provo a dare "gcc -g -m32 str.c str.o -o str" la risposta è:
/tmp/ccfuiXrQ.o: nella funzione "main":
/home/nic/Documenti/1415/ACE/1906/str.c:13: riferimento non definito a "astrcpy"
collect2: error: ld returned 1 exit status
Non riesco a saltarci fuori, qualcuno sa darmi una mano?
La parte di c è la seguente:
Codice: Seleziona tutto
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *astrcpy(char *, char *);
int main(int argc, char **argv){
char d[100]="",s[]="Programmare in Assembly e' bello!";
char *p;
int x;
p=astrcpy(d,s);
printf("la funzione ha restituito %p (%p): %s\n",p,d,d);
return 0;
}Codice: Seleziona tutto
CPU X64
global astrcpy ; esporto il simbolo
section .text
astrcpy:
push ebp ; salvo ebp
mov ebp,esp ; lo faccio puntare alla base dello stack
mov edi,[ebp+8] ; carico il primo argomento (indirizzo della stringa destinazion)
mov esi,[ebp+12] ; indirizzo secondo argomento
cld ; direction flag pari a 0
mov ecx,edi ; memorizzo valore da restituire
astrcpyc: lodsb
stosb
cmp al,0
jne astrcpyc
mov eax, ecx ; restituisco indirizzo stringa destinazione
pop ebp
ret