# BREAKPOINTS

Los breakpoints son interrupciones que se hacen al programa, cuando nosotros deseamos pararlo en un lugar especifico. Para esto tenemos tres tipos de breakpoints:

* `Software Breakpoints` : Este se coloca dando click en la linea que desamos y pulsanod F2 (todo esto lo hago en x64dbg), tambien se puede al hacer un doble click en la columna que lo queremos poner.&#x20;
* `Hardware Breakpoints` : Estos son breakpoints que estan en el procesador, estos son 4 por proceso y funcionan solo en el there principal. Este lo podemos poner dando click derecho en la linea -> breakpoints -> Set Hadware on Execution y tendremos un puntito rojo:&#x20;

  <figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FA4uf7UVxdo6I57sASXgr%2Fimage.png?alt=media&#x26;token=011108b6-1ff4-4b70-a99f-1b2ba575bd7a" alt=""><figcaption></figcaption></figure>

  Esto tambien lo podemos ver en este cuadri en el DR0, DR1, DR2, DR3 ya que solo son 4 por proceso:&#x20;

  <figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2F6uEGV57tBfRt8z4VUmxN%2Fimage.png?alt=media&#x26;token=4042e093-e42f-4589-a23c-94135953e245" alt=""><figcaption></figcaption></figure>
* `Memory Breakpoints` : Estos breakpoints se diferencian porque no solo se puede abarcar unos cuantos bytes, sino que se puede abarcar una seccion entera&#x20;
* `Breakpoints Conditional` : Este se aplica como su nombre lo dice, solamente cuando se cumple una condicion, para agregar un brakpoint condicional se hace lo siguiente; colocamos el brakpoint -> lo editamos -> colocamos la condicion:&#x20;

  <figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FZxh14GjzZxfPmcW7tyOV%2Fimage.png?alt=media&#x26;token=bbc5e3f4-1098-4f81-b059-3277cab0aa7b" alt=""><figcaption></figcaption></figure>

  En el ejemplo de la imagen esta ek 0 para especificar que no debe de parar y abajo es para que se imprima el valor de eax ya que el breakpoint esta en despues de un eax:&#x20;

  <figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FZSGVLe77aFHZB3SU06Eu%2Fimage.png?alt=media&#x26;token=eeeb833c-08b2-440e-9f95-8796488bb77b" alt=""><figcaption></figcaption></figure>

  Nos vamos a los logs los limpiamos y ejecutamos el programa y nos da esto:&#x20;

  <figure><img src="https://92799483-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9cgYhu8bocuplJfOrqoA%2Fuploads%2FzE5cWk8xmMXAqX2oB1YJ%2Fimage.png?alt=media&#x26;token=b8651741-bfc1-4d06-a338-67476b6b1e98" alt=""><figcaption></figcaption></figure>

  Nos damos cuenta que nos imprime el valor de eax y esto es igual al numero de letras que ingrese al programa. De igual manera podemos hacer que el breakpoint se detenga cuando agregaemos cierto numero de letras. Esto editando el 0 y agregando `EAX == 6` por ejemplo.
