l código generado del compilador @Tiny C emite NOP y JMP extra (¿innecesarios?)
Puede alguien explicar por qué este código:
#include <stdio.h>
int main()
{
return 0;
}
cuando se compila con tcc usandotcc code.c produce este asm:
00401000 |. 55 PUSH EBP
00401001 |. 89E5 MOV EBP,ESP
00401003 |. 81EC 00000000 SUB ESP,0
00401009 |. 90 NOP
0040100A |. B8 00000000 MOV EAX,0
0040100F |. E9 00000000 JMP fmt_vuln1.00401014
00401014 |. C9 LEAVE
00401015 |. C3 RETN
Supong
00401009 |. 90 NOP
al vez @ esté allí para un poco de alineación de memoria, pero ¿qué pasa con
0040100F |. E9 00000000 JMP fmt_vuln1.00401014
00401014 |. C9 LEAVE
e refiero a por qué el compilador insertaría este salto cercano que salta a lasiguient instrucción, ¿DEJARÍA ejecutar de todos modos?
Estoy en Windows de 64 bits que genera un ejecutable de 32 bits usando TCC 0.9.26.