Sip tienes razon por que salta a (bad) ese era un fallo. Ahora he puesto etiquetas.
De todos modos creo que para hacer shellcodes la posicion tiene que ser relativa porque luego se cambia.
Con etiquetas me sigue saliendo segmentation fault i creo que se porque es:
Ahora vemos que si que salta donde deberia.
Pero sale segmentation fault con el gdb me sale lo siguiente:
0x00000000004005ce ahi es donde da error. Habia pensado que igual era por que intenta escribir en la sección de codigo de programa y eso no se puede(si alguien lo sabe seguro que lo confirme).Tal vez como es una shellcode se supone que deberia estar en la pila y el codigo en ese caso si se podria modiaficar. Aver si alguien me lo puede decir.
Y gracias por la respuesta
De todos modos creo que para hacer shellcodes la posicion tiene que ser relativa porque luego se cambia.
Con etiquetas me sigue saliendo segmentation fault i creo que se porque es:
Código [Seleccionar]
0x00000000004005c4 <+0>: push %rbp
0x00000000004005c5 <+1>: mov %rsp,%rbp
0x00000000004005c8 <+4>: jmp 0x4005f3 <data>
0x00000000004005ca <+6>: pop %rsi
0x00000000004005cb <+7>: xor %rax,%rax
0x00000000004005ce <+10>: mov %al,0x7(%rsi)
0x00000000004005d1 <+13>: mov %rsi,0x8(%rsi)
0x00000000004005d5 <+17>: mov %rax,0xc(%rsi)
0x00000000004005d9 <+21>: mov $0xb,%al
0x00000000004005db <+23>: mov %rsi,%rbx
0x00000000004005de <+26>: lea 0x8(%rsi),%rcx
0x00000000004005e2 <+30>: lea 0xc(%rsi),%rdx
0x00000000004005e6 <+34>: int $0x80
0x00000000004005e8 <+36>: xor %rax,%rax
0x00000000004005eb <+39>: xor %rbx,%rbx
0x00000000004005ee <+42>: inc %rax
0x00000000004005f1 <+45>: int $0x80
0x00000000004005f3 <+0>: callq 0x4005ca <_Z7funcionv+6>
0x00000000004005f8 <+5>: (bad)
0x00000000004005f9 <+6>: (bad)
0x00000000004005fa <+7>: imul $0x78786873,0x2f(%rsi),%ebp
0x0000000000400601 <+14>: js 0x40067b <__libc_csu_init+27>
Ahora vemos que si que salta donde deberia.
Pero sale segmentation fault con el gdb me sale lo siguiente:
Código [Seleccionar]
(gdb) break funcion
Punto de interrupción 1 at 0x4005c8
(gdb) run
Starting program: /home/tuket/a.out
Breakpoint 1, 0x00000000004005c8 in funcion() ()
(gdb) stepi
0x00000000004005f3 in data ()
(gdb) stepi
0x00000000004005ca in funcion() ()
(gdb) stepi
0x00000000004005cb in funcion() ()
(gdb) stepi
0x00000000004005ce in funcion() ()
(gdb) stepi
Program received signal SIGSEGV, Segmentation fault.
0x00000000004005ce in funcion() ()
(gdb)
0x00000000004005ce ahi es donde da error. Habia pensado que igual era por que intenta escribir en la sección de codigo de programa y eso no se puede(si alguien lo sabe seguro que lo confirme).Tal vez como es una shellcode se supone que deberia estar en la pila y el codigo en ese caso si se podria modiaficar. Aver si alguien me lo puede decir.
Y gracias por la respuesta