Podemos ver que al principio:
dd fs:0 l1
0053:00000000 006ff930
dd 006ff930 l2
006ff930 006ff948 77a788c0
u 77a788c0 l1
ntdll!_except_handler4:
77a788c0 8bff mov edi,edi
dd 006ff948 l2
006ff948 ffffffff 77a853d2
u 77a853d2 l1
ntdll!FinalExceptionHandlerPad50:
77a853d2 90 nop
Y no seguimos que ffffffff debe ser el señalador de fin de cadena.
Ahora ejecutamos nuestro programa hasta MOV DWORD PTR FS:[0], ESP
dd fs:0 l1
0053:00000000 006ff8d0
dd 006ff8d0 l2
006ff8d0 006ff930 008d101a ;en rojo la ultima estructura que existia hasta entonces
u 008d101a
seh+0x101a:
008d101a 6a01 push 1
008d101c e801000000 call seh+0x1022 (008d1022)
008d1021 c3 ret
u 008d1022
seh+0x1022:
008d1022 ff2500208d00 jmp dword ptr [seh+0x2000 (008d2000)]
dps 008d2000 l1
008d2000 754a4f20 KERNEL32!ExitProcessImplementation
De esto puedo intentar deducir un monton de cosas aunque no se utilizar WinDbg.
Podemos ver que al principio:
dd fs:0 l1
0053:00000000 006ff930
¿Entonces existe un solo manejador de excepcion el cual se encuentra en 053h:0?
(supongo que dd es un comando y tendra que ver con
dump)
dd 006ff930 l2
006ff930 006ff948 77a788c0
u 77a788c0 l1
ntdll!_except_handler4:
77a788c0 8bff mov edi,edi
dd 006ff948 l2
006ff948 ffffffff 77a853d2
Imagino que esta es la estructura... ¿por que termina en 0ffffffffh? es decir ¿no deberia tener un tamano fijo?
u 008d101a
seh+0x101a:
008d101a 6a01 push 1
008d101c e801000000 call seh+0x1022 (008d1022)
008d1021 c3 ret
Bueno este debe ser el manejador... esto explica por que no podia repetirlo las veces que queria sin utilizar la pila.
Gracias por responder y disculpa mi ignorancia (jaja).