elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Diferencia entre estos dos codes (ASM)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Diferencia entre estos dos codes (ASM)  (Leído 3,930 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Diferencia entre estos dos codes (ASM)
« en: 24 Octubre 2009, 16:55 pm »

Hola que tal estan?

buen veran hayer estuve repasando los ejemplos que trae el MASM,y vi uno llamado (minimum) i se trata de un Hola mundo de soloo 1K!! aqui os pongo el codigo que utilizaba antes:
Código:
.386
.model flat,stdcall
option casemap:none
include All.inc

.data
txt db 'Hola mundo',0
cab txt db 'Titulo',0

.code
bg:

invoke MessageBox,0,offset txt,offset cab,0
invoke ExitProcess,0

end bg

Bien,ese codigo me muestra el mensaje hola mundo pero el tamaño del exe es de 2,50 Ks

pero tambien hice el de 1k kqie es asin:
Código:
.386
.model flat,stdcall
option casemap:none
include All.inc


.code
bg:

JMP @F

txt db 'Hola mundo',0
cab db 'Titulo',0

@@:

push 0
push offset cab
push offset txt
push 0
call MessageBox

push 0
call ExitProcess

end bg

Por que este ocupa menos que el otro? y lo que no entiendo es lo de JMP @F JMP = Jump no? eso a donde salta a @@ ? I LA "F" que pinta hay?¿


salu2



En línea

PeterPunk77

Desconectado Desconectado

Mensajes: 77



Ver Perfil
Re: Diferencia entre estos dos codes (ASM)
« Respuesta #1 en: 24 Octubre 2009, 17:43 pm »

La diferencia de tamaño viene dada porque en el primer ejemplo los datos del título y texto van en una sección nueva (.data) que no existe en el segundo ejemplo, que lo incluye directamente en el código.
Eso quiere decir que si los desensamblas verás:

Código del primer ejemplo:
Código:
00401000 <>/$  6A 00                    PUSH 0                                  ; /Style = MB_OK|MB_APPLMODAL
00401002   |.  68 0B304000              PUSH 0040300B                           ; |Title = "Titulo"
00401007   |.  68 00304000              PUSH 00403000                           ; |Text = "Hola mundo"
0040100C   |.  6A 00                    PUSH 0                                  ; |hOwner = NULL
0040100E   |.  E8 07000000              CALL <JMP.&user32.MessageBoxA>          ; \MessageBoxA
00401013   |.  6A 00                    PUSH 0                                  ; /ExitCode = 0
00401015   \.  E8 06000000              CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess
0040101A    $- FF25 08204000            JMP [<&user32.MessageBoxA>]             ;  user32.MessageBoxA
00401020    .- FF25 00204000            JMP [<&kernel32.ExitProcess>]           ;  kernel32.ExitProcess
y sus secciones:
Código:
Memory map
Address    Size       Owner                          Section      Contains                    Type              Access         Initial   Mapped as
00400000   00001000   Normal   00400000 (itself)                  PE header                   Imag 01001002     R              RWE
00401000   00001000   Normal   00400000              .text        code                        Imag 01001002     R              RWE
00402000   00001000   Normal   00400000              .rdata       imports                     Imag 01001002     R              RWE
00403000   00001000   Normal   00400000              .data        data                        Imag 01001002     R              RWE

Código del segundo ejemplo (mínimo):
Código:
00401000 <>/$ /EB 12                    JMP SHORT 00401014
00401002   |. |48 6F 6C 61 20 6D 75 6E >ASCII "Hola mundo",0
0040100D   |. |54 69 74 75 6C 6F 00     ASCII "Titulo",0
00401014   |> \6A 00                    PUSH 0                                  ; /Style = MB_OK|MB_APPLMODAL
00401016   |.  68 0D104000              PUSH 0040100D                           ; |Title = "Titulo"
0040101B   |.  68 02104000              PUSH 00401002                           ; |Text = "Hola mundo"
00401020   |.  6A 00                    PUSH 0                                  ; |hOwner = NULL
00401022   |.  E8 07000000              CALL <JMP.&user32.MessageBoxA>          ; \MessageBoxA
00401027   |.  6A 00                    PUSH 0                                  ; /ExitCode = 0
00401029   \.  E8 06000000              CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess
0040102E    $- FF25 08204000            JMP [<&user32.MessageBoxA>]             ;  user32.MessageBoxA
00401034    .- FF25 00204000            JMP [<&kernel32.ExitProcess>]           ;  kernel32.ExitProcess
y sus secciones:
Código:
Memory map
Address    Size       Owner                          Section      Contains                    Type              Access         Initial   Mapped as
00400000   00001000   Minimo   00400000 (itself)                  PE header                   Imag 01001002     R              RWE
00401000   00001000   Minimo   00400000              .text        code                        Imag 01001002     R              RWE
00402000   00001000   Minimo   00400000              .rdata       data,imports                Imag 01001002     R              RWE

El tamaño de las secciones se puede definir en la compilación, pero para el MASM por defecto es de 1 kb por sección, y ese es el tamaño que ganas entre ambos códigos.

Con respecto al "@F" es una de las palabras reservadas del MASM que hace referencia a la siguiente etiqueta (para los saltos) y existe otra "@B" para saltar a la etiqueta anterior.


« Última modificación: 24 Octubre 2009, 17:48 pm por PeterPunk77 » En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Diferencia entre estos dos codes (ASM)
« Respuesta #2 en: 24 Octubre 2009, 18:57 pm »

Gracias por responder,y otra pregunta imaginate que tengo 2 elementos guardados en la pila,como puedo hacer que ESP apunte al primero (no que lo retire sino solo que apunte a ese elemento)



salu2
En línea

YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: Diferencia entre estos dos codes (ASM)
« Respuesta #3 en: 24 Octubre 2009, 19:08 pm »

Gracias por responder,y otra pregunta imaginate que tengo 2 elementos guardados en la pila,como puedo hacer que ESP apunte al primero (no que lo retire sino solo que apunte a ese elemento)

Algo a si

Código
  1. push 4
  2. push 5
  3. add esp,4

el
Código
  1. dword[esp]
te valdria 4 pero el 5 seguiria en la pila ;)
En línea



Yo le enseñe a Kayser a usar objetos en ASM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿ Estan bien estos codes ?
PHP
Speeding 4 2,019 Último mensaje 2 Julio 2011, 19:04 pm
por engel lex
Que diferencia hay entre estos programas
Hacking Wireless
Pepediaz 7 4,299 Último mensaje 3 Mayo 2013, 19:53 pm
por jemez44
Cual es la diferencia entre estos dos scripts (batch)
Programación General
juntacadaveres 2 2,668 Último mensaje 25 Abril 2019, 22:59 pm
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines