redes para hackear eliminar comandos basicos c

para - comandos cmd windows 10



¿Cuál es la mejor herramienta de línea de comandos para limpiar el código? (6)

Si ejecuta gcc con -Wall, encontrará algunas de las cosas que menciona, como variables no utilizadas (y quizás funciones no utilizadas). En términos de optimizaciones, no lo hago, aunque en general el compilador es lo suficientemente inteligente como para hacer los tipos de optimizaciones que importan, así que no me preocuparía demasiado. Simplemente no use algoritmos horribles. ;-)

Cuando estoy escribiendo C - code, solo uso un editor y gcc. Me preguntaba si alguien podría sugerir una herramienta buena y simple que encontrará variables no utilizadas, declaraciones de funciones y posiblemente realizar algunas optimizaciones.

¿Alguien sabe una buena herramienta?


Lint es la herramienta clásica para verificar el estilo en los programas C. Hay una encarnación más moderna llamada Splint. Esta entrada de Wikipedia tiene una lista de herramientas de análisis de código estático, algunas gratuitas, otras comerciales.


Como señaló Dan Fego, GCC puede capturar variables no utilizadas y funciones estáticas no utilizadas. Normalmente no encontrará funciones externas no utilizadas, ya que normalmente funciona un archivo de origen a la vez.

GCC (v4.3.2) tiene cientos si no miles de opciones. Uno que podría ayudar es '' --combine '' para combinar archivos fuente (siempre que no tenga el hábito de poner la misma función o nombres de variables dentro de diferentes archivos fuente).

La opción '' --help '' le dice más; las opciones '' --help=optimizers '' y '' --help=warnings '' le dan un par de cientos de líneas de salida. Las advertencias incluyen:

-Wunused This switch lacks documentation -Wunused-function Warn when a function is unused -Wunused-label This switch lacks documentation -Wunused-macros Warn about macros defined in the main file that are not used -Wunused-parameter Warn when a function parameter is unused -Wunused-value Warn when an expression value is unused -Wunused-variable Warn when a variable is unused

Agregado : este es un script llamado glint que utilizo para desinfectar mi código. Es bastante antiguo, por lo que no usa la notación '' #!/bin/sh '' para la primera línea y dice '' $* '' en lugar de '' "$@" '', ambos deben corregirse, pero ninguno de los dos necesita para ser arreglado urgentemente Tenga en cuenta que, aunque GCC 4.x ya no admite la -fwriteable-strings '' -fwriteable-strings '', todavía admite la -Wwrite-strings '' -Wwrite-strings '' y tiene valor.

Este script demuestra que puede obtener un gran rendimiento de las herramientas existentes con solo una pequeña cantidad de trabajo. Puede configurar casi todas las opciones que utiliza, aunque principalmente a través del entorno en lugar de la línea de comandos. Por supuesto, puede agregar opciones de advertencia adicionales a la línea de comando; Lo que no puedes hacer es eliminar las opciones predeterminadas, excepto a través del entorno. Pero eso esta bien; son elegidos por defecto por buenas razones. En estos días, probablemente haya establecido '' GLINT_ANSI=-std=c99 '' o corrija el script; No lo he usado mucho desde que codifico bastante cerca del estándar que el glint impone. (Tenga en cuenta que '' -o /dev/null '' significa que solo puede hacer un archivo a la vez; ¡piratear para solucionarlo!)

: "@(#)$Id: glint.sh,v 1.5 2002/08/09 21:40:52 jleffler Exp jleffler $" # # Use GCC as excruciatingly pedantic lint # Not a complete replacement for lint -- it doesn''t do inter-file checking. # Now configurable via the environment. # Use GLINT_EXTRA_FLAGS to set extra flags via the environment. # NB: much Solaris code won''t work with -undef enabled. : ${GLINT_GCC:=''gcc''} : ${GLINT_ANSI=''-ansi''} : ${GLINT_FNO_COMMON=''-fno-common''} : ${GLINT_FSHORT_ENUMS=''-fshort-enums''} : ${GLINT_PEDANTIC=''-pedantic''} : ${GLINT_UNDEF=''-undef''} : ${GLINT_W=''-W''} : ${GLINT_WAGGREGATE_RETURN=''-Waggregate-return''} : ${GLINT_WALL=''-Wall''} : ${GLINT_WCAST_ALIGN=''-Wcast-align''} : ${GLINT_WCAST_QUAL=''-Wcast-qual''} : ${GLINT_WCONVERSION=''-Wconversion''} : ${GLINT_WMISSING_DECLARATIONS=''-Wmissing-declarations''} : ${GLINT_WREDUNDANT_DECLS=''-Wredundant-decls''} : ${GLINT_WMISSING_PROTOTYPES=''-Wmissing-prototypes''} : ${GLINT_WNESTED_EXTERNS=''-Wnested-externs''} : ${GLINT_WPOINTER_ARITH=''-Wpointer-arith''} : ${GLINT_WSHADOW=''-Wshadow''} : ${GLINT_WSTRICT_PROTOTYPES=''-Wstrict-prototypes''} : # ${GLINT_WTRADITIONAL=''-Wtraditional''} : ${GLINT_WWRITE_STRINGS=''-Wwrite-strings''} exec ${GLINT_GCC} / ${GLINT_ANSI} / ${GLINT_FNO_COMMON} / ${GLINT_FSHORT_ENUMS} / ${GLINT_PEDANTIC} / ${GLINT_UNDEF} / ${GLINT_WAGGREGATE_RETURN} / ${GLINT_WALL} / ${GLINT_WCAST_ALIGN} / ${GLINT_WCAST_QUAL} / ${GLINT_WCONVERSION} / ${GLINT_WMISSING_DECLARATIONS} / ${GLINT_WREDUNDANT_DECLS} / ${GLINT_WMISSING_PROTOTYPES} / ${GLINT_WNESTED_EXTERNS} / ${GLINT_WPOINTER_ARITH} / ${GLINT_WSHADOW} / ${GLINT_WSTRICT_PROTOTYPES} / ${GLINT_WTRADITIONAL} / ${GLINT_WWRITE_STRINGS} / ${GLINT_W} / ${GLINT_EXTRA_FLAGS} / -o /dev/null -O4 -g -c $*


Aunque estoy seguro de que esta no es una lista completa de herramientas de análisis de código estático , aquí están mis impresiones de algunas otras con las que he trabajado en el pasado. (Trabajo principalmente con C.)

  1. Splint : a menudo uso Splint porque está disponible para muchas distribuciones de GNU / Linux. Es relativamente fácil trabajar con él; sin embargo, tiende a ser abrumador cuando se opera en el entorno más estricto. Además, el uso a veces necesario de las anotaciones puede saturar y ofuscar el código fácil de leer. De todos modos, sugiero usarlo.

  2. Uno : Uno definitivamente es prometedor, pero no es tan riguroso como Splint (por diseño). En cambio, se centra en la claridad y la utilidad de sus advertencias. Para mí, Uno solo es útil como complemento de Splint (para señalar claramente las advertencias ocultas entre los muchos que publica Splint).

  3. PC-lint : me parece que PC-pelusa es difícil de manejar para un programa propietario. Lo usé una vez cuando desarrollo para MS-DOS y los nombres crípticos que usa para sus errores hacen que sea muy difícil de usar. Por lo que escuché, hay muchos mejores productos para usar en MS-DOS.

  4. Pscan : (hipervínculo muerto) ¡Pscan es excelente para encontrar vulnerabilidades de cadenas de formato! Al igual que con Uno, sugiero usarlo como un suplemento de Splint.

Si no trabaja con C, también puede consultar: Wikipedia - Lista de herramientas para análisis de código estático , Herramientas de revisión / inspección, Analizadores estáticos de código fuente / binario y Analizadores de seguridad de código fuente .


Qué tal utilizar un generador de perfiles y encontrar qué código se está ejecutando más, y centrarse en esas partes.

Tal vez gprof puede ayudar?

/ Johan

Editar: O desde que habló sobre la limpieza, invierta mi respuesta arriba y elimine el código que nunca se ejecuta.


splint ( http://www.splint.org/ ) es bastante excelente; Lo he usado en códigos megaline para buscar este tipo de cosas,

(Actualizado: todo el mundo quiere ser un director de arte).