Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda en Ensamblador

Estas en el tema de Ayuda en Ensamblador en el foro de Programación General en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/04/2009, 09:25
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años
Puntos: 0
Ayuda en Ensamblador

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 !
  #2 (permalink)  
Antiguo 28/04/2009, 09:48
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Ayuda en Ensamblador

Son 4 bytes, cada numero hex representa 4 bits, siempre podes hacer dos comparaciones ... dword ptr [eax] y byte ptr [eax+4].
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 28/04/2009, 09:51
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 4 meses
Puntos: 57
Respuesta: Ayuda en Ensamblador

Puedes utilizar algo como rep cmpsb. Anteponiendo rep a la instruccion, esta se ejecuta el numero de veces especificado en CX

Código:
; DS:SI primer cadena, ej. 1234567891h
; ES:DI segunda cadena, ej. el apuntador a la memoria que estas comparando
mov cx, 10
rep cmpsb
Para hacer esto debes tener los datos a comparar en DS:SI y ES:DI

Investiga sobre comparacion de cadenas
  #4 (permalink)  
Antiguo 28/04/2009, 10:32
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda en Ensamblador

Muchas Gracias use la doble comparacion.

Gracias !
  #5 (permalink)  
Antiguo 28/04/2009, 10:39
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Ayuda en Ensamblador

De nadas
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 28/04/2009, 13:57
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda en Ensamblador

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.
  #7 (permalink)  
Antiguo 28/04/2009, 14:22
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Ayuda en Ensamblador

Usa jl (jump if less) y jg (jump if greater).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 28/04/2009, 14:55
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda en Ensamblador

como? , un ejemplo me vendria de miedo.
  #9 (permalink)  
Antiguo 28/04/2009, 15:06
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Ayuda en Ensamblador

Código:
cmp eax, 060h ;limite inferior (incluye al mismo)
jl no
cmp eax, 069h ;limite superior (incluye al mismo)
jg no
;lo que quieras hacer
inc eax
inc eax
inc eax
;sigue el programa
no:
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #10 (permalink)  
Antiguo 28/04/2009, 15:16
 
Fecha de Ingreso: abril-2009
Mensajes: 5
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda en Ensamblador

Gracias ! por la ayuda =)
  #11 (permalink)  
Antiguo 28/04/2009, 15:20
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Ayuda en Ensamblador

No hay por donde
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:30.