Non so davvero se questo può essere d'aiuto, ma il controllo di O0 è abbastanza semplice nel disassemblaggio (objdump -d), dal momento che il il codice generato non ha alcuna ottimizzazione e aggiunge alcune istruzioni per semplificare il debug.
In genere su un x86, il prologo di una funzione include il salvataggio del puntatore dello stack (per il backtrace, presumo). Quindi, se si individua, ad esempio, la funzione principale, si dovrebbe vedere qualcosa di simile:
... principale: ... spingere% rbp ... mov% RSP,% rbp
E voi dovrebbe vedere questo "modello" in quasi ogni inizio delle funzioni. Per altri target (non so quale sia la tua piattaforma di destinazione), dovresti vedere sequenze di assemblaggio più o meno simili nei prologhi o prima delle chiamate di funzione.
Per altri livelli di ottimizzazione, le cose sono molto più difficili.
Ci scusiamo per il fatto di rimanere vaghi e di non rispondere all'intera domanda ... Spero solo che sia d'aiuto.
Questa domanda può aiutare: http://stackoverflow.com/questions/189350/detect-gp-compile-time-flags-of-a-binary – Nick
Sarei molto interessato al motivo di tale richiesta. In particolare, dovresti sapere che le ottimizzazioni possono essere attivate e disattivate su base individuale e che i livelli "O" sono solo gruppi per comodità. –
In particolare, vedere [questa risposta informativa] (http://stackoverflow.com/a/340828/15416) a questa domanda. Questa è la prova definitiva che non puoi farlo in modo affidabile. – MSalters