Hola y bienvenidos de nuevo.
En esta lección, vamos a aprender sobre la bandera de dirección, también conocida como la bandera DF en tu depurador
x64dbg.
Esta bandera está situada en la esquina superior derecha, agrupada con todas las demás banderas,
y ésta es la bandera de aquí.
Esta bandera controla si las direcciones de cadena aumentan o disminuyen después de cada instrucción de cadena.
La bandera.
Cuando la bandera se borra a cero, significa que la - dirección aumenta después de cada operación de cadena.
Por otra parte, si la bandera se establece en uno, esto significa que la dirección - disminuye después de cada operación
de cadena.
Cambio de bandera.
La instrucción CLD borraría la bandera.
Es decir, pone a cero la bandera DF.
Este es el significado de borrar una bandera, lo que significa que se convierte en cero.
STD es la instrucción que fijará la bandera, lo que significa que la bandera se convierte en uno.
Por defecto, el indicador está desactivado.
Es decir, DF es cero.
Algunos ejemplos prácticos de instrucciones CLD y STD.
Así que aquí vemos que tenemos la bandera CLD, que borra la bandera de dirección.
Así que esto incrementará el - después de cada instrucción STOS.
A continuación, MOV -, 12345678.
Esto carga el - con el valor
hexadecimal 12345678.
A continuación, movemos la dirección de la ubicación donde queremos que el - tenga la- para almacenar la nueva cadena.
Así que cargamos el - con la dirección conocida o la dirección que encontramos en el segmento de datos.
A continuación, llamamos a STOS D, de forma que STOS D almacenará la palabra doble 12345678 en la posición de memoria
apuntada por -.
A continuación, llamamos a ETS.
STD activará la bandera de dirección, lo que significa que la bandera DF ahora se convierte en uno.
Anteriormente, cuando hacíamos CLD, borrábamos la bandera de dirección, lo que significa que la bandera de dirección es cero.
Ahora lo ponemos a uno.
Así que esto tendría
el efecto de disminuir la dirección después de cada operación.
A continuación, movemos este nuevo
valor, 87654321, al registro -.
Así que carga - con valor hexadecimal
87654321.
A continuación, movemos esta nueva dirección a -.
Así que esto carga - con otra dirección conocida del segmento de datos.
Tenga en cuenta que esta dirección y esta dirección difieren en cuatro bytes o una dword.
Entonces llamamos a STOS D, por lo que STOS
D almacenará 87654321
hex en la posición de memoria apuntada por -.
Una cosa a tener en cuenta: los peligros de cambiar la bandera DF. Algunas otras instrucciones pueden depender de DF, como algunas funciones
también asumen que la bandera DF es cero.
Por lo tanto, si alguna vez fija el indicador en uno por la razón que sea, asegúrese de hacer CLD más tarde cuando haya terminado.
Así que CLD lo restablecería a su estado por defecto, que es cero.
Así que ahora vamos a probar esto en el x64dbg.
Así que ya lo he hecho.
Yo ya he tecleado todas estas instrucciones, así que te animo a que tú también lo intentes.
Bien, todas
estas instrucciones aquí.
Así que como puedes ver, esta dirección, 403050, es del segmento de datos del mapa de memoria.
El segmento es la ubicación donde puedes almacenar tus constantes.
Así que este es 00403050, y este, 00403054, es una dword después de eso, que es esta ubicación.
Si paso el ratón por aquí, verá que aparece la dirección 00403054 en la ventana emergente.
Así que ahora vamos a poner el punto de interrupción aquí, y luego vamos a ejecutar.
Llega a nuestro punto de ruptura.
Pasemos ahora.
Echa un vistazo a la bandera DF actualmente es cero.
Vamos a llamar a CLD, que es borrar la bandera. Como ya es cero, esto no tiene ningún
efecto.
Así que pasamos por encima, y vemos que no hay ningún cambio en la bandera puesto que ya es cero.
Ahora vamos a mover este valor a -, así que estate atento al registro -.
Así que ahora...
ahora... el registro tiene
el valor 12345678.
A continuación, vamos a mover esta dirección de segmento de datos 00403050, que está aquí, al registro -.
Así que vamos a dar un
paso más, y ahora ves - registro tiene la dirección 00403050.
A continuación, vamos a llamar a STOS D. Así que mira lo que pasa a - después de llamar
a STOS D. Mira también lo que pasa aquí.
Así que llamemos a STOS D. Actualmente, - tiene la dirección así, por lo que vamos a llamarlo - vamos
a ejecutar esta instrucción.
Y ahora aumenta en cuatro bytes.
Este es el significado de DF cero.
DF cero significa que aumenta la dirección del registro, la dirección del registro, por así decirlo. Cuando DF sea uno, entonces esto no aumentará,
disminuirá.
Pero en este caso, porque DF es cero, por lo que - aumentará.
Así que aumenta en cuatro bytes debido a STOS D, y luego por aquí nos damos cuenta de que el valor en -, 123 45678, ya ha
sido copiado a esta posición de memoria debido a STOS D, y se guarda
en orden endian inverso,
little-endian.
12345678 en orden inverso.
Ahora vamos a cambiar la bandera de dirección poniéndola a uno.
Observe lo que ocurre con la bandera DF cuando
pasamos por encima de la instrucción STD.
STD ahora establece este to-DF se convierte en uno.
Ahora vamos a mover un valor diferente a -, 87654321, y ver el -
registro aquí como paso sobre esto. Este valor 87654321
se copia en - registro.
A continuación, vamos a mover otra nueva dirección a -, que en realidad es esta dirección de aquí.
Así que pasemos por encima.
Y ahora - tiene esta nueva dirección,
00403054, que apunta aquí.
Ahora estamos listos para hacer STOS D. Así que tenemos DF bandera ahora se establece en uno.
Así que cuando llamemos a STOS D, va a reducir la dirección aquí en lugar de aumentarla.
Así que ahora es 00403054.
Acércate y lo verás.
Así que como se puede ver aquí, también el valor en - registro se ha copiado aquí
en orden inverso, 87654321.
Así funciona la bandera DF
Es un controlador de la dirección del incremento en el - registro, ya sea para aumentar hacia adelante
o hacia atrás.
Bueno, salvemos esto primero.
Ya he guardado esto como un archivo 59 llamado STD. exe, para que puedas hacer lo mismo.
Eso es todo por este vídeo.
Gracias por vernos.