elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Llamar dirección
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Llamar dirección  (Leído 2,938 veces)
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Llamar dirección
« en: 9 Abril 2013, 18:20 pm »

Hola

Cuando cargo unos bytes en el stack, y luego los llamo con un call tengo el siguiente problema.

Código
  1. pushq $0x050f01b0
  2. callq *%rsp

Sería una llamada a exit, crea un segmentation fault, cuando cargo los bytes en memoria igual.

Código:
PSIG  SIGSEGV SIG_DFL code SEGV_MAPERR<1> addr=0x6001d0 trapno=6

En C más de lo mismo.

Cuando miro el disassembler llama a esp, no entiendo porque no llamada a rsp, seguro que esta hay el problema.

Pero en 32 bits funciona bien.

También mirare los manuales.

Un saludo.

P.D:

Código
  1. (*(void(*)()) code)();

 :huh: :huh:

Código
  1. mov    $0x600980,%edx
  2. mov    $0x0,%eax
  3. callq  *%edx



En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Llamar dirección
« Respuesta #1 en: 9 Abril 2013, 18:29 pm »

Quizas esos bytes estan en una zona de la memoria que no tiene permiso de ejecucion. Por ejemplo la sección .data de un ejecutable ELF, que supongo que es el tipo de ejecutable que estas usando.

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Llamar dirección
« Respuesta #2 en: 9 Abril 2013, 18:49 pm »

No creo que se por el ejecutable Dani, creo que es la arquitectura como dije en 32 bits si funciona pero no en 64 bits.

Citar
PSIG  SIGSEGV SIG_DFL code SEGV_MAPERR<1> addr=0x7f7ffffc92a8 trapno=6

Un saludo.
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Llamar dirección
« Respuesta #3 en: 9 Abril 2013, 20:14 pm »

Pues no se, de todos modos SIGSEGV significa que has accedido a una direccion de memoria a la que no tenias permiso para acceder de la forma que lo has hecho, en este caso para ejecucion, asi que mira con un debugger que permisos tiene la direccion que estas llamando.

Saludos.

PD:

Código
  1. mov    $0x0,%eax


[broma]Creia que eras mas pro ;)[/broma]

Código
  1. xor      %eax,%eax
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Llamar dirección
« Respuesta #4 en: 9 Abril 2013, 21:37 pm »

Ahora mirare bien los manuales.

Gracias por lo de pro, pero tú no entiendes mis bromas, ni nadie  :xD.

Eso es el disassembler de C.

Código
  1. (*(void(*)()) code)();

Un saludo.


EI: juntando mensajes.


Todo esto funciona bien en backtrack, el problema es que utilizo OpenBSD y protege la memoria y el stack, por eso no puedo hacer esa llamada.

Un saludo.
« Última modificación: 11 Abril 2013, 17:51 pm por Eternal Idol 7D » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
LLamar a una direccion de memoria desde otro programa
Ingeniería Inversa
s_azazel 9 5,236 Último mensaje 31 Octubre 2010, 19:19 pm
por [Zero]
Ayuda con metodo para encontrar la direccion del Kernel y llamar APIs en memoria
ASM
harry_the_blogger 5 3,610 Último mensaje 17 Agosto 2014, 10:51 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines