2012-05-07 15 views

Respuesta

3

Si está familiarizado con el ensamblado, puede usar el comando a para cambiar el ensamblaje (es decir, gire los códigos de operación para "a = 25;" en todos los NOP). Esto es lo que normalmente hago cuando quiero NOP o cambiar una secuencia de instrucciones.

De vez en cuando la gente se basan en el hecho de que el código de bytes para la instrucción NOP es 0x90 y utilizar el correo comando para editar la memoria (por ejemplo, "ew @eip 0x9090"). Este es el mismo resultado que usar el comando a.

Por último, si usted está golpeando esta operación con poca frecuencia y sólo quiere saltar manualmente la instrucción puede utilizar la, operación GUI "conjunto de instrucciones actual":

http://msdn.microsoft.com/en-us/library/windows/hardware/ff542851(v=vs.85).aspx

2

No es un tutorial que aquí explica cómo hacer esto, puede establecer el desplazamiento para que omita la línea: http://cfc.kizzx2.com/index.php/tutorial-using-windbg-to-bypass-specific-functions-windbg-kung-fu-series/ y establecer el registro eip en este valor.

Además, se puede establecer el punto de interrupción y poner la orden en el punto de interrupción a hacer lo mismo: http://japrogbits.blogspot.co.uk/2010/01/using-breakpoints-to-skip-function-in.html y otro blog: http://www.shcherbyna.com/?p=1234 y también se puede utilizar el .call para lograr el mismo: http://blogs.msdn.com/b/oldnewthing/archive/2007/04/27/2292037.aspx

5

nuevo un muy tarde respuesta, pero si jugar con el montaje no es preferible
establece un punto de interrupción condicional para omitir la ejecución de una línea

en el siguiente ejemplo 401034 es la línea que no desea ejecutar
a fin de establecer un punto de interrupción condicional en esa línea a omitirlo

bp 401034 "r eip = @$eip + size of current instruction";gc"
en este caso gc = go de conditionl romper

jmptest:\>dir /b 
jmptest.c 

jmptest:\>type jmptest.c 
#include <stdio.h> 
int func() 
{ 
    int a = 10 , b = 20; 
    a = 25; 
    b = 30; 
    return a+b; 
} 
int main (void) 
{ 
    int i , ret; 
    for (i= 0; i< 10; i++) 
    { 
     ret = func(); 
     printf("we want 40 we get %d\n",ret); 
    } 
    return 0; 
} 
jmptest:\>cl /nologo /Zi jmptest.c 
jmptest.c 

jmptest:\>dir /b *.exe 
jmptest.exe 

jmptest:\>cdb -c "uf func;q" jmptest.exe | grep 401 
00401020 55    push ebp 
00401021 8bec   mov  ebp,esp 
00401023 83ec08   sub  esp,8 
00401026 c745fc0a000000 mov  dword ptr [ebp-4],0Ah 
0040102d c745f814000000 mov  dword ptr [ebp-8],14h 
00401034 c745fc19000000 mov  dword ptr [ebp-4],19h 
0040103b c745f81e000000 mov  dword ptr [ebp-8],1Eh 
00401042 8b45fc   mov  eax,dword ptr [ebp-4] 
00401045 0345f8   add  eax,dword ptr [ebp-8] 
00401048 8be5   mov  esp,ebp 
0040104a 5d    pop  ebp 
0040104b c3    ret 

jmptest:\>cdb -c "bp 401034 \"r eip = 0x40103b;gc\";g;q " jmptest.exe | grep wan 
t 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 
we want 40 we get 40 

jmptest:\> 
Cuestiones relacionadas