Diferencia entre revisiones de «Desensamblador»

Contenido eliminado Contenido añadido
Botellín (discusión · contribs.)
m Robot: reemplazando {{en}} por «(en inglés)»
Sin resumen de edición
Línea 1:
Un '''desensamblador''' es un [[programa de ordenadorinformático]] que traduce [[lenguaje de máquina]] (código binario) a [[lenguaje ensamblador]],; es la operación inversa a la que realiza un [[ensamblador]].
 
El programa desensamblador a utilizar, por trabajar con lenguaje máquina y ensamblador, depende exclusivamente del microprocesador que estamos usando (para que pueda reconocer las instrucciones del código binario), de la arquitectura de la máquina y del sistema operativo en uso (no es lo mismo [[Microsoft Windows]] que [[Linux]]).
 
== ¿Qué no hace un desensamblador? ==
El desensamblador transforma el código binario en instrucciones básicas de la [[Computadora personal|PC]] en la que se ejecuta, el programa no es capaz de distinguir si dichas instrucciones provienen de un '''"if'''", de un '''"for'''" o de un '''"while'''". Tampoco conoce los nombres de las variables (no se incluyen en el código binario ya que la máquina no usa nombres), así que suele inventar nombres como VAR_0001, VAR_0002, etc.
Un desensamblador no puede:
* Rescatar los nombres de las variables o las funciones nombradas por el programador
* Recuperar los comentarios
* Rescatar código fuente perdido
Existe una salvedad a todo esto y es cuando el que compiló el programa ha habilitado una opción, que es incluir la [[Depuración de programas|información de debug]] en el programa (usualmente se trata de programas en fase de desarrollo y no de programas finales).
 
En cuanto a las funciones, algo parecido pasa con las funciones internas del programa, se suelen llamar CALL_0001 o JMP_0001, o algo por el estilosimilares, dependiendo de si son direcciones de llamadas con o sin retorno, respectivamente.
==¿Qué hace un desensamblador?==
El desensamblador transforma el código binario en instrucciones básicas de la PC en la que se ejecuta, el programa no es capaz de distinguir si dichas instrucciones provienen de un '''if''', de un '''for''' o de un '''while'''. Tampoco conoce los nombres de las variables (no se incluyen en el código binario ya que la máquina no usa nombres), así que suele inventar nombres como VAR_0001, VAR_0002, etc.
 
En cuanto a las funciones, algo parecido pasa con las funciones internas del programa, se suelen llamar CALL_0001 o JMP_0001, o algo por el estilo, dependiendo de si son direcciones de llamadas con o sin retorno, respectivamente.
 
Las funciones externas son dependientes según el sistema en el que se corra el programa a desensamblar:
 
Bajo sistemas como [[DOS]], la mayoría de las veces puede indicar las funciones que se llaman (llamar a una función requiere típicamente un llamado a interrupción con valores específicos en los registros, que deben ser consultados si no son provistos por el programa desensamblador). Por ejemplo, para imprimir un texto en pantalla:
 
<source lang="asm">
mov ax, 0009
mov dx, offset TEXTO
int 21h
</source>
 
En cambio bajo sistemas operativos modernos como Windows, las funciones se llaman ''por nombres'', y esto suele ser bastante autoexplicativo. Esto resulta cierto para la mayoría de las funciones provistas por el sistema operativo y llamados externos en las [[DLLBiblioteca de enlace dinámico|DLLsbibliotecas de enlace dinámico]]. Por ejemplo, las funciones '''CreateFile''' o '''ReadFile'''.
 
== ¿Qué no hace un desensamblador? ==
==Uso de los desensambladores==
Un desensamblador no puede:
Los desensambladores son ampliamente utilizados para [[Cracking (software)|crackear programas]] y para realizar [[ingeniería inversa]]. También son utilizados por desarrolladores de software, investigadores o estudiantes.
 
* Rescatar los nombres de las variables o las funciones nombradas por el programador.
==Programas desensambladores==
* Recuperar los comentarios.
La mayoría de los desensambladores decentes se encuentran en inglés, para una lista consultar [[:en:Disassembler|este artículo en inglés]].
* Rescatar código fuente perdido.
 
Existe una salvedad a todo esto y es cuando el que compiló el programa ha habilitado una opción, que es incluir la [[Depuración de programas|información de debugdepuración]] en el programa (usualmente se trata de programas en fase de desarrollo y no de programas finales).
==Véase también==
 
*[[Ensamblador]]
== Uso de los desensambladores ==
*[[Microprocesador]]
Los desensambladores son ampliamente utilizados para [[Cracking (software)|''crackear'' programas]] y para realizar [[ingeniería inversa]]. También son utilizados por desarrolladores de software, investigadores o estudiantes.
 
== Programas desensambladores ==
La mayoría de los desensambladores decentes se encuentran en inglés, para una lista consultar [[:en:Disassembler|este artículo en inglés]].
 
== Véase también ==
==Enlaces externos==
* [[Ensamblador]]
* [[Microprocesador]]
 
== Enlaces externos ==
*[http://www.program-transformation.org/Transform/DisAssembly Lista de desensambladores], transformation Wiki (en inglés)
* [http://www.thefreecountryprogram-transformation.comorg/programmingTransform/disassemblers.shtmlDisAssembly Lista de desensambladores (sólo gratuitos)], The freetransformation countryWiki (en inglés)
* [http://www.thefreecountry.com/programming/disassemblers.shtml Lista de desensambladores (sólo gratuitos)], The free country (en inglés)
 
[[Categoría:Herramientas de programación]]