2010-12-04 17 views
0

Comment construire un programme C qui inclut le point d'entrée sur Mac OS X?Comment construire un programme C qui inclut le point d'entrée sur Mac OS X?

Je veux construire:

start() { 
    /* exit system call */ 
    asm("movl $1,%eax;" 
     "xorl %ebx,%ebx;" 
     "int $0x80" 
    ); 
} 

mais quand je lance:

gcc -nostdlib min.c 

Je reçois toujours:

ld: could not find entry point "start" (perhaps missing crt1.o) 
collect2: ld returned 1 exit status 

L'une autre tentative, je fait juste pour voir ce qu'il faisait était exécuté:

gcc -nostdlib -c min.c && otool -tV min.o 

Et la sortie est:

(__TEXT,__text) section 
_start: 
0000000000000000 pushq %rbp 
0000000000000001 movq %rsp,%rbp 
0000000000000004 leave 
0000000000000005 ret 

Alors, où est-ce que underscore viennent d'avant la fonction "start"? Comment puis-je empêcher cela? Ou plus simplement:

Comment construire un programme C qui inclut le point d'entrée sur Mac OS X?

Merci, CrazyChenz

+0

_start est un nom tronqué, probablement. Avant de créer un démarrage, sachez qu'il y a beaucoup de prétraitement à effectuer ou que toutes sortes de problèmes se produiront. Pour avoir une idée des symboles que vous devez définir, essayez nm crt1.o. gcc -e main fait "principal" le point d'entrée au lieu de commencer. Vous pouvez définir n'importe quelle fonction de cette façon. Je ne sais pas comment définir cette option pour Xcode. Quelqu'un d'autre pourrait le faire. –

Répondre

0

L'option gcc -e définit le point d'entrée, lorsque vous voulez que le point d'entrée pour être autre chose que commencer. De cette façon, vous pouvez créer mystart() en tant que point d'entrée.

gcc -e mystart mycode.c -o mycode 

Je ne sais pas comment définir l'option -e dans Xcode.