2011-04-14 30 views

Respuesta

6

para ejecutar código shell, puede editar el contenido de una función directa:

(gdb) b foo 
Breakpoint 1 at 0x400608 
(gdb) run 
Breakpoint 1, 0x0000000000400608 in foo() 
(gdb) x/16bx foo 
0x400604 <foo>:  0x55 0x48 0x89 0xe5 0x53 0x48 0x81 0xec 
(gdb) set ((unsigned char *)foo)[6] = 0x85 
(gdb) x/16bx foo 
0x400604 <foo>:  0x55 0x48 0x89 0xe5 0x53 0x48 0x85 0xec 
(gdb) cont 

No sé cómo ejecuta códigos de operación desde gdb, pero ciertamente puedes hacer lo que quieras con los registros. Por ejemplo, en lugar de mov %rbx, %rax puede utilizar set $rax = $rbx:

(gdb) p $rax 
$1 = 3671197290184 
(gdb) set $rax = $rbx 
(gdb) p $rax 
$2 = 0 
(gdb) 
+0

¿Cuál es la diferencia entre 'let' y' set'? – compiler

+0

Lo siento, es un error tipográfico, se supone que debe leer 'set'. Arreglaré la publicación. –

+0

¿Hay un env Python Shell para el código de ensamblado? –

-1

No creo que gdb incluya un ensamblador, por lo que no esperaría poder ingresar directamente al ensamblaje.

Usted puede utilizar el comando shell GDB para ejecutar comandos shell:

(gdb) shell uname -m 
x86_64 
+0

pero en C que puede incrustar assebmly directamente, ¿verdad? Aquí me refiero a cosas como '\ x23 \ x24 ...' por el código de shell – compiler

+0

por "shellcode", el compilador significaba un tipo específico de [código binario] (http://en.wikipedia.org/wiki/Shellcode) ejecutado por la CPU. –

Cuestiones relacionadas