Programación General > ASM (Ensamblador)
Problema Tonto En Ring 0
G.Owl:
Hola, a todos.
Verán tengo un problemilla que no acierto resolver. Les cuento:
Empece a programar en masm32 una simple a aplicacion de consola que saltase a ring 0 y escribiese el tipico hola mundo.
Termino el code y esta bien, es decir salta a ring 0 y me deja ejecutar instrucciones privilegiadas (el fallo no esta aqui porque tras ejecutarlas, vuelvo a ring 3).
Pero al intentar usar la api WriteConsole desde ring 0 para escribir el saludo, el programa falla.
Si lo corro desde windows, te da el tipico cartel de enviar errores. Si lo corro desde OllyDbg se me resetea el ordenador (lo que tiene tocar el kernel xD).
Se me ocurrio usar LoadLibrary y GetProcAddress pero no funciona.
Aqui es donde me pierdo porque al intentar usar cualquier api de ring 3 (MessageBoxA,GetStdHandle,etc) solo me da error el programa.
Mi pregunta es que debo hacer para usar esas apis desde ring 0 ? Tiene apis "equivalentes" ? Porque si es como en ring 3 deberia cargar la libreria, buscar su direccion y llamarla. Pero si no se como hacerlo.
Gracias por su ayuda.
Eternal Idol:
¿Estas trabajando bajo 9x o NT? Desde el vamos en modo Kernel no existen esas funciones ... igual no se exactamente que estas haciendo.
De cualquier manera usa el WinDbg para depurarlo y analiza el dump generado si da un BSOD.
G.Owl:
Perdón, se me olvidó nombrar la plataforma. Si Nt 5, Windows Xp SP2.
Eso si lo hago analizar los archivos de dump, pero que el fallo es poner un bp cuando estoy en ring 0.
Lo que no he probado es a correr el programa con WinDbg no se si dara dump tambien.
Solo intento escribir un texto en una consola, pero desde ring 0. Por eso que intente cargar la libreria y buscar la funcion. Pero me fue imposible.
Gracias
Eternal Idol:
OK, NT 5.1 entonces.
¿Que fallo es poner un breakpoint? Depura en modo Kernel con el WinDbg entonces (necesitas otra maquina) o usa el SoftIce (obsoleto ya).
La logica es que no funcione nada de lo que estas haciendo, tendria que ver tu codigo y depurarlo como para decirte en que punto esta el problema exactamente.
G.Owl:
Mi error esta en que no se llamar a las apis desde ring 0.
Por ejemplo, esto lo hago para usar la api WriteConsole en ring 3
--- Código: Text --- .386.model flat,stdcall.option casemap:none include windows.incinclude kernel32.inc includelib kernel32.lib .data api db 'WriteConsole',0 dll db 'Kernel32.dll ',0 .code start: lea eax,dll push eax call GetModuleHandle ;porque esta dll ya esta cargada en memoria test eax,eax jz fin mov ecx,eax lea edx,api push edx push ecx call GetProcAddress ;me daria la direccion de la api jz fin ; en eax nos queda la direccion de la funcion WriteConsole ; y ya podria hacer un ; push arg 5 ; push arg 4 ; push arg... ; call eax ; y la api se ejecutaria fin: push 0 call ExitProcess end start
Lo que quiero hacer es eso mismo pero en ring 0. Usar cualquier api. A no ser que pr estar en un anillo diferente no me deje acceder a ellas. En ese caso estoy mas perdido que antes xD
Navegación
[#] Página Siguiente
Ir a la versión completa