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.