@Pettinato
Sei cascato in un piccolo "tranello" della programmazione (chiamiamolo così, in realtà è un piccolo errore di logica): non occorre gestire gli argomenti del main per avere dei problemi con eventuali buffer overflows, perchè comunque se il programma viene eseguito passando dei parametri, questi da qualche parte devono pur finire, e un eventuale buffer overflow porterebbe la parte eccedente il limite previsto ma mal gestito (o non gestito) a "sporcare" (=sovrascrivere) aree di memoria che possono contenere dati (= "falsi" i risultati dell'elaborazione, anche se in questo caso non fai niente - in realtà è un po' più complicato), oppure istruzioni, ed è qui che nascono i problemi, perchè se sovrascrivi un'istruzione con dei dati, allora incasini il programma, ma in pratica ottieni "solo" un errore (tipicamente il dato sarà riconosciuto come istruzione non valida), ma se la sovrascrivi con una istruzione maligna possono essere cavoli (e se l'area sovrascritta non appartiene al programma specifico, ma ad esempio al sistema operativo che gestisce il passaggio dei parametri al programma, è ancora peggio).
In realtà, questo caso specifico non dovrebbe essere un grosso problema, nel senso che comunque, almeno in una fase iniziale, la lettura dei parametri dovrebbe essere effettuata dal sistema operativo, che difficilmente la gestirà male (tipicamente, ragiunto un certo limite dovrebbe troncare e scartare tutti quelli successivi), però basta a far capire quanto siano pericolosi certi dettagli apparentemente insignificanti (e se poi il bug dovesse essere nel compilatore, son dolori, perchè è più difficile scovarli), quanto sia sbagliato dare per scontato che qualcosa andrà sicuramente per il verso giusto (Monroe docet

), e quanto certe critiche su software complessi abbiano il peso specifico delle chiacchiere da bar.
Comunque, soluzioni come quella di Java, che gestisce la memoria per conto del programma, sono tendenzialmente più sicure, perchè ti affidi ad un layer software che ha funzioni comunque limitate e più facili da monitorare, risolvendo certi problemucci in un modo almeno statisticamente più efficiente rispetto ad avere mille miliardi di programmi diversi, che devono fare tutto da soli (statisticamente avremo più errori, e complessivamente una maggiore difficoltà nel risolverli tutti).
@ k0nt3
Ehm, non vorrei infierire (

) ma temo che un sistema operativo abbia bisogno di qualche altra istruzione per poter effettuare il context switch, creare e lanciare il processo, quindi o scrivi qualcos'altro in assembly, facendo molta attenzione, oppure inserisci la tua NOP in un listato da compilare, e ritorniamo alla questione dei bug che non si conoscono: il colmo sarebbe provocare un crash di sistema cercano di non fare niente!