O código gerado pelo compilador C Minúsculo C emite NOPs e JMPs extras (desnecessários)
Alguém pode explicar por que esse código:
#include <stdio.h>
int main()
{
return 0;
}
quando compilado com tcc usandotcc code.c produz 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
Eu acho qu
00401009 |. 90 NOP
talvez esteja lá para algum alinhamento de memória, mas e quanto a
0040100F |. E9 00000000 JMP fmt_vuln1.00401014
00401014 |. C9 LEAVE
Quero dizer, por que o compilador insere esse salto próximo que salta para oPróxim instrução, LEAVE seria executado de qualquer maneir
Estou no Windows de 64 bits gerando executável de 32 bits usando o TCC 0.9.2