GNU/Linux >> Tutoriales Linux >  >> Linux

advertencia de carga:no se puede encontrar el símbolo de entrada _start

Utilice la etiqueta 06 en lugar de 16 para el punto de entrada ELF. 23 implica que es como el C 37 función, pero esto ni siquiera es una función (por ejemplo, no puede 45 ).

No dices, pero a partir de los mensajes de error y el código, asumo que estás creando tu código de 32 bits con 54

(Si en realidad está creando un código de 64 bits, tiene suerte de que funcione, pero se romperá tan pronto como haga algo con 66 en lugar de 78 .)

El mensaje de error es de 85 , no de 95 . Lo dice justo en el mensaje. El comentario de Tim es correcto:103 busca un 110 símbolo en los archivos que vincula, pero establece el punto de entrada al principio del segmento de texto si no encuentra uno.

No importa qué otros símbolos globales/externos defina. 125 no tiene ninguna relevancia aquí y podría apuntar a cualquier lugar que desee. Solo es útil para una salida de desmontaje y cosas por el estilo. Su código funcionaría exactamente igual si sacara el 139 / 142 líneas, o las cambió a cualquier otro nombre.

Etiquetar eso como 155 es imprudente porque el punto de entrada de ELF no es una función . Es no 161 y no recibe 174 y 182 argumentos y no puede 192 porque ESP apunta a 207 en lugar de una dirección de remitente.

Usa solo 215 si se vincula con el código de inicio CRT de gcc/glibc que busca un 225 símbolo y lo llama después de inicializar libc. (Así que funciona como printf). si lo vinculó, pero generalmente no lo haga a menos que comprenda exactamente lo que está haciendo). Relacionado:Montaje de archivos binarios de 32 bits en un sistema de 64 bits (cadena de herramientas GNU)

p.ej. 247 si define un 256
en lugar de 261
(que es equivalente a su desnudo 275 ).

(Durante los últimos años, las distribuciones de Linux han configurado GCC con 280 como predeterminado, que quiere un código independiente de la posición. Pero eso es realmente un inconveniente en el modo de 32 bits sin direccionamiento relativo a RIP (observe la salida asm de GCC, por ejemplo), y significa 291 no convertirá 300 en 312 para ti. Entonces, para la mayoría de los asm escritos a mano que siguen la mayoría de los tutoriales, desea ejecutables tradicionales que no sean PIE, por lo que no se necesitan reubicaciones de texto).


Le sugiero que vincule sus archivos de objeto (sin importar cómo se produzcan) con 323 , no 336 .

340 llamará 350 con las opciones adecuadas, ya que sabe más sobre el código fuente y creará lo que sea necesario para los supuestos que 362 hace.


Linux
  1. Cómo solucionar el error de configuración:no se puede encontrar el directorio de macros 'm4' [Resuelto]

  2. Error de OpenCA No se puede cargar el certificado desde la base de datos

  3. Error de configuración de phpize:no se pueden encontrar las fuentes (config.m4)

  4. ¿No se puede encontrar -lm?

  5. Apache no se puede iniciar después de la reinstalación

No se puede encontrar pspell:corrige el error de configuración de PHP

Linux:¿todos los programas en C necesitan cargar una biblioteca?

/usr/bin/ld:no se puede encontrar -lpython2.7

Advertencia de Hadoop No se puede cargar la biblioteca nativa de Hadoop para su plataforma

No se puede encontrar el error de pkg-config

Error de compilación usando cmake:no se puede encontrar -lpthreads