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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Implementar Stack Trace (Walk through stack)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Implementar Stack Trace (Walk through stack)  (Leído 3,695 veces)
kub0x
Enlightenment Seeker
Colaborador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Implementar Stack Trace (Walk through stack)
« en: 15 Marzo 2014, 15:53 pm »

Buenas tardes foreros,

ando con un proyecto entre manos en C++ y me tocó implementar la parte del stack trace tanto en el tratamiento de excepciones como en las llamadas de las funciones clave.

La verdad que ésto me impresiono bastante y me gustaría plantear lo mismo en ASM.

En ASM tenemos que la pila se divide en stack frames (marcos de pila). El registro EBP apuntará al marco de pila actual, pero claro, cada frame tiene propio tamaño, por lo que me imposibilita el poder 'caminar' por la pila en busca de las direcciones de las funciones o métodos contenidos en la pila.

Para poder calcular el tamaño de una frame podriamos restar EBP y ESP, ya que a ESP le quitamos el tamaño de los parámetros y variables locales reservadas por la función.

¿Podría alguien encaminarme? En caso de conseguirlo entonces publicaría el code.

Un saludo!


En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Implementar Stack Trace (Walk through stack)
« Respuesta #1 en: 15 Marzo 2014, 16:52 pm »

Para windows puedes usar las API's StackWalk64/CaptureStackBackTrace lee acerca de ellas en la MSDN para que veas como se usan  ;)
Saludos


En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
kub0x
Enlightenment Seeker
Colaborador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Implementar Stack Trace (Walk through stack)
« Respuesta #2 en: 15 Marzo 2014, 22:02 pm »

ando con un proyecto entre manos en C++ y me tocó implementar la parte del stack trace tanto en el tratamiento de excepciones como en las llamadas de las funciones clave.

Bueno como arriba dije, esta parte ya la tengo cubierta. CaptureBackStackTrace no es funcional a la hora de tratar con excepciones ya que no devuelve toda la Stack Trace, así que me pasé a StackWalk. Con StackWalk no he tenido ningún problema, actualmente funciona al pelo ;)

Os pido consejo porque me gustaría implementar una rutina que haga lo mismo en ASM.

Saludos!
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Implementar Stack Trace (Walk through stack)
« Respuesta #3 en: 16 Marzo 2014, 02:42 am »

¿Ya tenes el codigo que necesitas en la API de Windows? Podes usar el WinDbg o el IDA para ver el codigo en cuestion.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Implementar Stack Trace (Walk through stack)
« Respuesta #4 en: 16 Marzo 2014, 18:11 pm »

Por lo que entendi quieres una funcion que determine el tamaño de la pila no? O el espacio que gasta cada funcion?

Si es el primero, lo puedes implementar con codigo muy simple, que es mas o menos lo que dijiste, pero no tiene por que ser ebp, puede ser cualquier registro que apunte a una direccion anterior a esp.

Código
  1. .section .text
  2. .globl _start
  3.  
  4. movq %rsp, %rbp
  5. pushq %rax
  6. pushq %rax      ;------> imaginate que esos push son una llamada a una funcion
  7. sub %rsp, %rbp

Como se trata de un x64 los pushq restan 8 bytes en teoria la pila estaria en 16 bytes, tendrias 16 en rbp "o en cualquier otro registro" pero tambien puedes guardar datos en la pila sin decrementar esta, y ese metodo no valdria.

Un saludo.
« Última modificación: 16 Marzo 2014, 18:14 pm por cpu2 » En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Implementar Stack Trace (Walk through stack)
« Respuesta #5 en: 16 Marzo 2014, 19:21 pm »

Si lo que quieres es ir localizando los stack frame para luego ver su tamaño, simplemente tienes que ir usando ebp para localizar el frame actual
Luego en [ebp] encontraras el valor anterior de ebp. por lo que solo tienes que hacer esto hasta llegar al final de la pila....

Saludos Ark
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con la clase Stack T_T
Java
.Maku. 4 5,089 Último mensaje 11 Mayo 2009, 02:01 am
por AlbertoBSD
[SRC] STACK for C++
Programación C/C++
x64core 5 3,325 Último mensaje 25 Noviembre 2011, 08:37 am
por BlackZeroX
Ayuda con la Pila (Stack)
ASM
isidora 6 5,794 Último mensaje 3 Diciembre 2011, 03:33 am
por Иōҳ
Duda con Stack Pointer (Registro 13)
ASM
JonaLamper 3 2,869 Último mensaje 27 Marzo 2014, 23:50 pm
por xv0
El compiler pareciera agregar algo entre variables de la stack desviando return « 1 2 »
Bugs y Exploits
harry_the_blogger 17 10,390 Último mensaje 19 Enero 2015, 17:33 pm
por .:UND3R:.
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines