SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: XjersonX en Martes 28 de Abril de 2009, 17:42

Título: Problema con Source
Publicado por: XjersonX en Martes 28 de Abril de 2009, 17:42
Bueno Soy nuevo en la web y tengo una duda.

Lo que sucede esque cree un source que busque por toda la memoria unos determinados bytes y los sobreescriba.
Por ejemplo.

Buscar : 1234567891h
Reemplazar solo el ultimo byte por 92h

Lo que sucede esque en ASM solo me dejan hacerlo pero como maximo hasta 8 bytes osea hasta 12345678h.


push eax
mov eax,04000000h ; Desde aqui empiesa a buscar desde la direccion 04000000
xor cx,cx

bucle:
inc eax

cmp dword ptr[eax],12345678h ; no me deja buscar 1234567891h solo hasta 8 bytes osea hasta 12345678h

jz Final
Loop bucle

Final:
mov dword ptr[eax+6],92h ; sobreescribo los dos ultimos bytes por 92 y deveria quedar 12345692h


   jmp bucle


Bien , la cuestion es como buscar todo si solo me deja hasta 8 bytes y lo que tengo son 10 bytes?.

PD: Solo me falta esa parte lo demas esta hecho el SEH y el resto del codigo. Solo me falta ese pedasito ayuda !
Título: Re: Problema con Source
Publicado por: m0skit0 en Martes 28 de Abril de 2009, 17:47
Bueno, si encuentras 0x12345678 sólo te falta comprobar si el siguiente byte (ptr[eax]+1) es 0x91  ;)

Y por favor, la próxima vez utiliza las etiquetas de código.
Título: Re: Problema con Source
Publicado por: Eternal Idol en Martes 28 de Abril de 2009, 17:58
Son 4 bytes, cada numero hex representa 4 bits, siempre podes hacer dos comparaciones ... dword ptr [eax] y byte ptr [eax+4].
Título: Re: Problema con Source
Publicado por: XjersonX en Martes 28 de Abril de 2009, 18:32
Muchas gracias con la doble comparacion me basto.
Título: Re: Problema con Source
Publicado por: Eternal Idol en Martes 28 de Abril de 2009, 18:39
De nadas  B)
Título: Re: Problema con Source
Publicado por: XjersonX en Martes 28 de Abril de 2009, 21:59
Hola denuevo ! miren tengo otro problema espero que me ayuden T_T

push eax
mov eax,04000000h
xor cx,cx

bucle:
inc eax

cmp dword ptr[eax],12345678h
cmp byte ptr[eax+4],91h

jz Final
Loop bucle

Final:
mov byte ptr[eax+4],92h
jmp bucle


Todo perfecto verdad? . Pero lo que pasa esque quisiera hacerlo que comparara entre un numero determinado y solo los que esten en ese rango se sobreescriban.

Por ejemplo:

push eax
mov eax,04000000h
xor cx,cx

bucle:
inc eax

cmp dword ptr[eax],12345678h
cmp byte ptr[eax+4],91h ; Aki hacerlo que se sobreescriban por 92h todos los que esten en un rango por ejemplo entre 91 a 99.

jz Final
Loop bucle

Final:
mov dword ptr[eax+4],92h
jmp bucle

Lo mas cuerdo es hacerlo con los simbolos de Matematicas , == Suma resta , etc.. Pero nos e como lo podria hacer. Ayuda !

De ante mano gracias muxaxos me estan ayudando mucho.
Título: Re: Problema con Source
Publicado por: Eternal Idol en Martes 28 de Abril de 2009, 22:23
Usa jl (jump if less) y jg (jump if greater).
Título: Re: Problema con Source
Publicado por: XjersonX en Martes 28 de Abril de 2009, 22:55
como? , un ejemplo me vendria de miedo.
Título: Re: Problema con Source
Publicado por: Eternal Idol en Martes 28 de Abril de 2009, 23:07
Código: ASM
  1. cmp eax, 060h ;limite inferior (incluye al mismo)
  2. jl no
  3. cmp eax, 069h ;limite superior (incluye al mismo)
  4. jg no
  5. ;lo que quieras hacer
  6. inc eax
  7. inc eax
  8. inc eax
  9. ;sigue el programa
  10. no:
  11.