Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Horricreu en 16 Julio 2010, 21:11 pm



Título: [KERNEL MODE][?] No puedo incluir ntddk
Publicado por: Horricreu en 16 Julio 2010, 21:11 pm
Buenas, estoy empezando a programar en Kernel Mode y, tengo ya descargado y configurado el compilador del DDK sin Visual Studio 2008. El caso es que quería probar como configurarlo para Visual Studio 2008 (http://www.codeproject.com/KB/winsdk/vs2008_and_drivers.aspx). Seguí todos los pasos y, también he enlazado la librería ntddk. Cuando compilo me dice que no existe esta librería y, también lo probé de hacerlo con pragma aunque es lo mismo :-\

¿Alguna sugerencia?

Muchas gracias y saludos :P


Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Littlehorse en 16 Julio 2010, 22:00 pm
Para responderte primero es necesario saber que hiciste, paso por paso.

  • Enumera los pasos que has hecho
Mas allá que estén en el link, es necesario saber específicamente lo que has hecho para poder encontrar el error

  • Como has intentado linkear? que has puesto en pragma?
Igualmente dudo que eso tenga que ver, un tema es una referencia indefinida y otra muy distinta es que la librería ni siquiera exista. Postea los errores.

Si el error es que la librería no existe, mi primer palpito es que no agregaste los directorios (inc,lib) correctamente a los paths del VS.

  • El WDK esta configurado correctamente?
Intenta generar un mínimo ejemplo sin utilizar Visual Studio para confirmar que todo lo relevante este instalado correctamente.

Saludos!



Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Eternal Idol en 17 Julio 2010, 02:13 am
Los archivos de cabecera se incluyen no se enlazan ... te veo un poco verde para este tema.


Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Littlehorse en 17 Julio 2010, 10:12 am
Por eso le pregunte que es lo que había intentado enlazar, porque al principio creí que lo de linkear era solo un error de concepto y en realidad se refería a incluir, pero como no respondió, probablemente tengas razón y haya intentado enlazar el header con pragma lib u agregándola en las dependencias adicionales. Si fue así, supongo que el error ya le habrá quedado claro ;D.

Igualmente si con linkear se refería a incluir, el problema probablemente se deba a que los directorios de los archivos a incluir no están agregados correctamente.

Horricreu, no se si estas leyendo algún libro, pero te recomendaría que vayas a la par de algún libro introductorio del tema y de paso que revises bastante la documentación del ddk.

Saludos!


Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Horricreu en 17 Julio 2010, 12:01 pm
Vamos a ver, ya eliminé el DDK porque me daba problemas en el PC, no se instalaba... y, como se puede hacer directamente con el Visual Studio 2008 pues mejor.

A ver, seguí los pasos de aquella Web y, en el paso número 10 decía que se podrían poner las librerías deseadas. Como decía, me fui a: Linker/Input/Additional Dependencies y puse lo siguiente: ntoskrnl.lib hal.lib ntddk.lib $(NOINHERIT)

Puede que el problema esté aquí.

Los archivos de cabecera se incluyen no se enlazan ... te veo un poco verde para este tema.

Hago lo que puedo, si me confundí de nombres ahora ya lo sé :)

Por eso le pregunte que es lo que había intentado enlazar, porque al principio creí que lo de linkear era solo un error de concepto y en realidad se refería a incluir, pero como no respondió, probablemente tengas razón y haya intentado enlazar el header con pragma lib u agregándola en las dependencias adicionales. Si fue así, supongo que el error ya le habrá quedado claro ;D.

Igualmente si con linkear se refería a incluir, el problema probablemente se deba a que los directorios de los archivos a incluir no están agregados correctamente.

Horricreu, no se si estas leyendo algún libro, pero te recomendaría que vayas a la par de algún libro introductorio del tema y de paso que revises bastante la documentación del ddk.

Saludos!


No respondí porque en España era un poco tarde y, estaba muy cansado :xD

Saludos :P

EDITO: pongo el código:

Código
  1. #include "ntddk.h"
  2.  
  3. NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
  4. {
  5. DbgPrint("Ejemplo");
  6.  
  7. return STATUS_SUCCESSFUL;
  8. }


Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Hendrix en 17 Julio 2010, 15:49 pm
EDITO: pongo el código:

Código
  1. #include "ntddk.h"
  2.  
  3. NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
  4. {
  5. DbgPrint("Ejemplo");
  6.  
  7. return STATUS_UNSUCCESSFUL;
  8. }

Cuando descargues el driver te va a dar BSOD ya que te falta código (Rutina de salida, como mínimo).



Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Horricreu en 17 Julio 2010, 17:43 pm
Bueno es igual. Mejor dejo el Kernel Mode para más adelante siguiendo los sabios consejos de Eternal Idol :)

Saludos :P


Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Eternal Idol en 17 Julio 2010, 17:52 pm
Cuando descargues el driver te va a dar BSOD ya que te falta código (Rutina de salida, como mínimo).

En realidad la rutina de descarga es opcional y este modulo se descarga automaticamente al retornar un error.


Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Hendrix en 18 Julio 2010, 13:54 pm
Cuando descargues el driver te va a dar BSOD ya que te falta código (Rutina de salida, como mínimo).

En realidad la rutina de descarga es opcional y este modulo se descarga automaticamente al retornar un error.

Sin dar BSOD?? Sabia que se descargaba dando un error, y por lo tanto una BSOD... siempre creí que la rutina de descarga era obligatoria  :-\

Bueno es igual. Mejor dejo el KM para más adelante siguiendo los sabios consejos de EI :)

Saludos :P


Creo que haces bien, sigue practicando en modo usuario para luego intentar entender y poder picar código para modo kernel.


Un Saludo


Título: Re: [KERNEL MODE][?] No puedo linkear ntddk.h
Publicado por: Eternal Idol en 18 Julio 2010, 14:31 pm
Sin dar BSOD?? Sabia que se descargaba dando un error, y por lo tanto una BSOD... siempre creí que la rutina de descarga era obligatoria  :-\

Claro, un BSOD se produce por una excepcion no controlada (en modo Kernel) y en este caso estamos hablando de un valor de retorno no exitoso, algo totalmente esperado y no una excepcion. Lo mejor es que lo pruebes, vas a ver el mensaje en el depurador, el modulo se descargara posteriormente y el S.O. seguira funcionando sin problemas (al menos no relacionados con el modulo  ;D).

PDRIVER_UNLOAD DriverUnload
The entry point for the driver's Unload routine, if any, which is set by the DriverEntry routine when the driver initializes. If a driver has no Unload routine, this member is NULL.

La mayoria de los modulos de seguridad no tienen una rutina de descarga, de otra manera con hacer "net stop modulo" ya te saltarias la proteccion :xD