mover en memoria

Iniciado por rembolso, 24 Julio 2011, 22:16 PM

0 Miembros y 1 Visitante están viendo este tema.

rembolso

hola. acabo de empezar a programar en asm y e echo unos 25 ejemplos con hola mundo y ese tipo de cosa tambien e practicado descargar de una pila en orden etc. pero me encuentro con esta actividad mover el contenido de una direccion de memoria a otra direccion  ejemplo:
direccion a
004033C0 "hola mundo"
direccion b
004033E0 "mira esto:"
-------------
.MODEL SMALL
.CODE
Programa:
MOV AX, 004033C0
MOV DS, AX
MOV 004033E0 ,AX

.STACK

END Programa
------------ Y EN la direccion de mem 004033E0  TENDRIA QUE QUEDAR "mira esto: hola mundo"
pero me sale error bue me canse de intentarlo de mil formas diferentes talves me den una mano soy nobb ajaja  y un tutorial donde salgan este tipo de ejemplos saludos

_Enko

La instruccion que estas buscando es "movsb" o bien "lodsb y stosb".

Saludos

rembolso

tendrias un ejemplo de como funciona o mas detalle yo encontre este pero no lo entiendo mucho con el rep

MOV AH, 62h
: INT 21h
: MOV ES, BX
: CLD
:
: mov bx, @data
: mov es, bx
: lea di, buffer
: mov cx , 333
: rep movsb
: mov [di], 30h ;** line 23 ????
:
: mov dx,buffer
: MOV AH, 09h
: INT 21h

Иōҳ

creo que tienes que leer un libro de ensamblador.

aquí te dejo un ejemplo:

Código (asm) [Seleccionar]
.data
Address1 db "Mensaje:"
         db 25 dup (0)

Address2 db"Hola Mundo",0

.code
start:

lea esi, offset Address2
lea edi, offset [Address1 + 8]; Apunta a la memoría reservada, despues de "Mensaje:"
mov ecx, 10; Longitud de Address2
cld; Por Seguridad ._.
rep movsb

end start

Eres adicto a la Ing. Inversa? -> www.noxsoft.net

rembolso

Иōҳ ese ejemplo si no me equivoco es para concatenar cadenas pero lo q yo busco es unir sectores de memoria (en ejecucion).
ejemplo
memoria :D
DIRECCION|   Hex byte                                     |show bytes
------------------------------------------------------------------------------
03BB0000   |  4D 65 6E 73 61 6A 65                   |Mensaje.....
03BB0001   |  00 00 00 00 20 14 55                    | . . . . . 2  @
03BB0009   |  48 6F 6C 61 20 4D 75 6E 64 6F      |Hola Mundo......
------------------------------------------------------------------------------
LA COSITA es que me traslade la cadena  03BB0000(mensaje) a la cadena 03BB0009   (hola mundo). y el sector de  memoria quedaria :
DIRECCION|   Hex byte                                     |show bytes
------------------------------------------------------------------------------
03BB0000   |  4D 65 6E 73 61 6A 65                   |Mensaje.....
03BB0001   |  00 00 00 00 20 14 55                    | . . . . . 2  @
03BB0009   |  48 6F 6C 61 20 4D 75 6E 64 6F 4D 65 6E 73 61 6A 65     |Hola Mundo Mensaje......
------------------------------------------------------------------------------
quedaria modificado en memoria. (supongamo que es la memoria de otro proceso )
lo que necesito es concatenar cualquier sector de memoria no importa si es de otra aplicacion

_Enko

#5
Si estas en win32, la memoria viene protegida, donde intentes acceder a una direccion de memoria que no pertenece a tu ejecutable te encontraras con una excepcion.

Si quieres modificar otra ejecutable, tendras que cargarla como si fueras un depurador y ahi tendras acceso.
busca info de como cargar una ejecutable para depurar, o bien, tambien te sirve tutoriales para hacer trainers de videojuegos.

Citar
MOV AX, 004033C0
no hay forma que 004033C0 entre en AX que es un registro de 16bit.
Aqui tienes toda la info que necesitaras:
http://msdn.microsoft.com/en-us/library/ms679303

Иōҳ

00402000  4D 65 6E 73 61 6A 65 3A 00 00 00 00 00 00 00 00  Mensaje:........
00402010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402060  00 00 00 00 00 00 00 00 00 00 00 00 48 6F 6C 61  ............Hola
00402070  20 4D 75 6E 64 6F                                 Mundo

despues de pasar las instrucciones que te deje:

00402000  4D 65 6E 73 61 6A 65 3A 48 6F 6C 61 20 4D 75 6E  Mensaje:Hola Mun
00402010  64 6F 00 00 00 00 00 00 00 00 00 00 00 00 00 00  do..............
00402020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00402060  00 00 00 00 00 00 00 00 00 00 00 00 48 6F 6C 61  ............Hola
00402070  20 4D 75 6E 64 6F                                 Mundo

Es lo que pides, ahora esto lo especificas recien

Citarquedaria modificado en memoria. (supongamo que es la memoria de otro proceso )
lo que necesito es concatenar cualquier sector de memoria no importa si es de otra aplicacion

Como te dice _Enko, puedes mirar los trainer para juegos, y es que si tú quieres mover una cadena, o concatenar (porque eso haces) de una dirección de memoría a otra, primero tienes que saber si ese espacio, o bloque de memoría tiene permisos de lectura/escritura, si tiene el suficiente espacio para almecenar tu cadena concatenada.

Si tú estás en tu ejecutable, y haces mov eax, 004033C0, haciendo referencia al ejecutable externo, lo más probable es que te de una excepción, y crashee tu aplicación (en realidad estás haciendo referencia a tu ejecutable, no al externo), ya que o esa dirección no existe en tu ejecutable o estás intentando escribir en un lugar de tu ejecutable que no es la code, puede ser también que ahí hay opcodes y las estás cambiando.


Podes optar por un trainer o inyección dll.

Te dejo unos links talvez te interecen.

http://foro.elhacker.net/programacion_cc/tutoc_lecturaescritura_de_datos_de_una_aplicacion_externa_con_ejercicio-t258994.0.html

http://foro.elhacker.net/programacion_cc/tutorialiniciandome_en_el_hacking_mediante_inyeccion_de_dll_con_ejercici-t258750.0.html

http://foro.elhacker.net/asm/tutoinyeccion_dll_%E2%80%93_full_api-t282673.0.html

Nox.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

rembolso

gracias. estoy buscando informacion asrca de la la estructura dememoria en assm y como actua . esto ya lo eecho en c++ y en vb  con copymen en c pero quiero en asm jeje .si termino el code lo posteo gracias

Иōҳ

Cita de: rembolso en 25 Julio 2011, 19:18 PM
gracias. estoy buscando informacion asrca de la la estructura dememoria en assm y como actua . esto ya lo eecho en c++ y en vb  con copymen en c pero quiero en asm jeje .si termino el code lo posteo gracias

Puedes usar las mismas apis en asm, sin importar el lenguaje, siempre hacen lo mismo.
Eres adicto a la Ing. Inversa? -> www.noxsoft.net