La compilación del código fuente convierte el código fuente en código máquina. El código Mavhine es básicamente un montón de instrucciones que la CPU entiende. Una cosa importante para recordar es que las instrucciones de la máquina están en un nivel mucho más bajo. Lo que eso significa es que debe proporcionar más instrucciones a la máquina. Entonces, por ejemplo, algo como a = a + b se traducirá a
Busque la dirección de la variable A y almacene en R1 Busque la dirección para la variable B y guárdela en R2 Busque el contenido de la dirección almacenada en R1 y almacénelo en R4 Busque el contenido de la dirección almacenada en R2 y almacénelo en R5 Agregue R4 y R5 y guárdelo en R3 Ponga R3 en la dirección almacenada en R1
Como puede ver, el código se alarga, y esto es solo una simple adición. Cuando agrega bucles, y funciones, y punteros de función, y varios tipos de operadores, el código de máquina comienza a ser cada vez más complicado.
Además de eso, la traducción al código de máquina pierde nombres de variables y funciones. Gran parte de nuestra comprensión del código proviene de nombres de funciones y variables. Si tiene una función bien nombrada, sabe lo que hace del nombre. Si no lo hace, debe realizar ingeniería inversa del código
- ¿Cuáles son los principales jugadores de iBeacon (o balizas BLE) en Brasil?
- ¿Cuál es la mejor manera de aprender sobre la administración de versiones de software?
- Una aplicación se cierra continuamente. ¿Qué tiene de malo y cómo puede un desarrollador resolver el problema?
- ¿Cuál es el mejor software para crear gráficos en movimiento?
- ¿Puede el software de reconocimiento facial funcionar en un dibujo?
Entonces, el código está realmente ofuscado. no oculto
Solía haber un momento en que las personas escribían código en el código de máquina, y solían poder leer el código de máquina. Por ejemplo, Linus Torvald (el inventor de Linux) solía escribir en código máquina cuando era joven (o en sus propias palabras, “como un hombre”: D). Hoy, sin embargo, debido a la explosión de los lenguajes de orden superior, el conjunto de instrucciones para la máquina y las técnicas que dependen de la generación de código de máquina en tiempo de ejecución, la tarea se ha vuelto exponencialmente difícil.
Probablemente pueda leer el código ahora, si es un súper genio y extremadamente talentoso. Probablemente no tendrá un incentivo porque tomará menos esfuerzo hacer ingeniería inversa de la aplicación jugando con ella, que hacer ingeniería inversa del código.