2012-01-13 6 views
5

Hay sitios de resolución de problemas como topcoder.com, SPOJ. Me gustaría que el caso de uso similar (la gente me envíe archivos de programas en C++) haga algunas restricciones.prohibir ensamblado en línea en g ++ (gcc) o sonido metálico (llvm)

Uno de ellos es:

  • "no está permitido el uso de ensamblaje en la línea"

¿Cómo puedo hacer cumplir esta prohibición? ¿Hay una forma más inteligente (como las banderas del compilador? Pero no he encontrado ninguna útil) que simplemente buscar frases en el código fuente.

puedo restringir a las personas g ++ o sonido metálico. Se están haciendo cosas en Linux.

+0

¿Por qué quieres hacer eso? Restringir el asm en línea no ayuda mucho si le preocupa la seguridad. – servn

+0

@servn Ok. Pero no solo estoy preocupado por la seguridad, sino por la competencia justa C/C++. Me gustaría evitar que las personas usen asm, solo porque decidimos sobre esa regla. Quiero automatizar el proceso de dicha política. Entiendo que no es una solución completa y que hay necesidad de más. Gracias por mencionarlo. Tal vez tienes algunas ideas más? Si está interesado en la seguridad, por favor, echa un vistazo a mis otras preguntas: [Security.SE] (http://security.stackexchange.com/users/4077?tab=questions) –

Respuesta

0

Parece que estás en busca de la bandera -fno-asm.

Aunque parece que solo hace asm en lugar de hacer también __asm__ así que quizás agregue un -D__asm__=something_that_will_error.

Consulte también -fno-gnu-keywords para desactivar asm en C++.

+1

gcc 4.4.6 página de manual bajo Linux implica esto no inhabilita '__asm__'. – Alnitak

4

¿Qué tal:

% gcc -Dasm=error -D__asm__=error 
+0

¿Cómo funciona? Entiendo que hace macros con nombres: 'asm',' __asm__'. ¿Se permiten las palabras clave incorporadas sombreadas? ¿Puedo hacer lo mismo para prohibir llamadas a funciones (como "sistema()")? ¿Es una solución segura, no hay forma de solucionarlo (piratear)? –

+1

@GrzegorzWierzowiecki el preprocesador recibe su mano en el código antes de que el compilador, y no tiene conocimiento de las palabras clave, de modo que sí, puede cambiarlos. Se puede solucionar: un simple '#undef asm' en el código lo haría. Eso sería fácil de encontrar sin embargo. – Alnitak

+0

Cada vez que miro [El ofuscado C Concurso Código Internacional] (http://www.ioccc.org/) Estoy cada vez más miedo hay maneras para confundir las cosas, como 'asm' #undef. –

Cuestiones relacionadas