elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Help, porfa: [Linker error] undefined reference to '.......
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Help, porfa: [Linker error] undefined reference to '.......  (Leído 8,729 veces)
codeliber

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Help, porfa: [Linker error] undefined reference to '.......
« en: 2 Octubre 2009, 21:33 pm »

Hola a todos,

A ver si me podeis hechar una mano, porfa.  :)

Estoy haciendo un code en c++ (lenguaje que conozco) y necesito usar puntalmente esta rutina en asm (lenguaje que no domino), que he encontrado y me vendría de maravilla.

La rutina es esta:

unsigned char    tablasci2[ TABLE_NUM ][ TABLE_SIZE ];

//===================================
#ifndef INLINE_ASM
unsigned char change( unsigned char byte, unsigned int num )
{ num &= 0x7;  return tablasci1[num][byte]; }
#endif
//===================================
char *encript_buffer( char *buffer, int len, char *key, int keylen, int pos )
{
        #ifdef INLINE_ASM
        // esi - buffer        edi - key       ecx - i        ebx - j        edx - k      pos
       asm (
        "movl   %3, %%edi;\n"   // edi contains keylen
        "cmp    $16, %%edi;\n" // if ( keylen > MAX_KEY_LEN )
        "jle    _skip_if1;\n"
        "mov    $16, %%edi;\n" // keylen = MAX_KEY_LEN;
        "_skip_if1:\n"
         "movb   (%%edi,%%ebx),%%al;\n" //al contain key[j]
        "addb   %%bl,%%al;\n"   // key[j]+j in eax
        "movl   %4, %%edx;\n"   // pos in edx
        "addl   %%ecx, %%edx;\n"// (i + pos) in edx
        "andl   $7, %%edx;\n" // edx &= 7
        "sall   $8, %%edx;\n" // edx *= 256
        "addl   %%edx, %%eax;\n"
        "addl   $tablasci2, %%eax;\n" // eax += tablasci2    :o

 ........ etc.. etc...

        #else 
       
       int  i,  j,  k;

        if ( keylen > MAX_KEY_LEN ) keylen = MAX_KEY_LEN;
  ...... etc... etc....
}

Pues, cuano lo compilo, me da este error:
  [Linker error] undefined reference to `tablasci2'

Me podeis hechar una mano esplicandome porqué da este error y como puedo solucionarlo, porfa? Estoy ya en las ultimas....
Uso el Dev-C++ y el micro es un Intel

Gracias  :)



En línea

No quiero ser un pez, por eso necesito que me enseñes a pescar. :)
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Help, porfa: [Linker error] undefined reference to '.......
« Respuesta #1 en: 2 Octubre 2009, 21:37 pm »

¿Y donde esta la tabla?  ;D

Aca la declaras:
Código
  1. unsigned char    tablasci2[ TABLE_NUM ][ TABLE_SIZE ];

Supongamos que TABLE_NUM y TABLE_SIZE tiene como valor 2, en algun lugar tenes que tener definido el array, ejemplo:

Código
  1. unsigned char    tablasci2[ 2 ][ 2 ] =
  2. {
  3. {5,6},
  4. {8,9}
  5. };


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
codeliber

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Help, porfa: [Linker error] undefined reference to '.......
« Respuesta #2 en: 2 Octubre 2009, 23:48 pm »

Oks.  Gracias Idol por la respuesta.  :) Pues he probado a definir el array justo a continuacion de su definicion, he compilado y sigue dando error de linker.

Aprovecho para añadir algo de info, por si puede ser de ayuda....

unsigned char    tablasci2[ TABLE_NUM ][ TABLE_SIZE ] = { {0,0} , {0,0} };

//===================================
#ifndef INLINE_ASM
...........
...........
...........

El programa comienza con una llamada a " encript_buffer(..... ) " así:
     
    // Get a new expand key with 256 bits
        strcpy( newkey, key );
        encript_buffer( newkey, 16, "K#ç=+xnNX~Nx6544", 16, 0 );

  for ( j=0; j<TABLE_NUM; j++ ){
       for ( i=0; i<TABLE_SIZE; i++ ) ascii=i;
       for ( i=0; i<TABLE_SIZE; i++ ){
             tablasci2[j][ ascii ] = i;
......
.....
.....

Por cierto, tengo entendido que esta sintaxis del asm es para linux, mientras yo uso
el windows.
Talvez en el Dev-C++ hay que activar alguna opcion para que compile el asm??
 Lo que pasa es que debería dar error en todo y no solo en la ref de link tabla.

Buwaaa....   :-( a ver como salgo de esta?   :)

En línea

No quiero ser un pez, por eso necesito que me enseñes a pescar. :)
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Help, porfa: [Linker error] undefined reference to '.......
« Respuesta #3 en: 2 Octubre 2009, 23:58 pm »

El error es del enlazador, ya fue compilado el codigo asi que no tiene nada que ver con la sintaxis del codigo en assembly (es mas, si no estas definiendo INLINE_ASM ni siquiera lo usa realmente). Lo que si podria suceder es que el simbolo sea _tablasci2 asi que proba usando $_tablasci2 en lugar de $tablasci2.

PD. La proxima vez deja una version minima compilable asi hay que adivinar menos, el array no estaba declarado como extern asi que ese no era el error.
« Última modificación: 3 Octubre 2009, 00:01 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
codeliber

Desconectado Desconectado

Mensajes: 35



Ver Perfil
Re: Help, porfa: [Linker error] undefined reference to '.......
« Respuesta #4 en: 3 Octubre 2009, 00:17 am »


  GRACIASSSSS  Idol  :)

  Diablo!!! era eso.
  Pues, es un code de cifrado que vi en Google code search.
  No entiendo mucho del tema cifrado, peró me ha dado la sensacion (por las funciones randow que usa) que es algo interesante.
 Bueno: con la idea de compartir cosas, si alguien quiere hecharle una ojeada, dejo la dire:

 http://www.google.com/codesearch/p?hl=es&sa=N&cd=1&ct=rc#Z0riSPmpmU8/phcript-1.0.1/phcript.c&q=criptografy%20lang:c

This is Google's cached copy of http://downloads.sourceforge.net/magic-cube/phcript-1.0.1.tar.gz

Gracias de nuevo, family (sabia que podía contar con el foro)  :)



En línea

No quiero ser un pez, por eso necesito que me enseñes a pescar. :)
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Help, porfa: [Linker error] undefined reference to '.......
« Respuesta #5 en: 3 Octubre 2009, 00:26 am »

De nadas  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines