Pagina 1 di 1

gcc c e assembly: riferimento non definito a funzione

Inviato: domenica 24 maggio 2015, 16:58
da DavidGale
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:

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;
}
mentre l'assembly è:

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 

Re: gcc c e assembly: riferimento non definito a funzione

Inviato: domenica 24 maggio 2015, 22:15
da crap0101
se imposti --prefix a '_', nel file .c "astrcpy" dovrai dichiararla e chiamarla come "_astrcpy"