Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: FermatsTheorem en 31 Octubre 2017, 04:58 am



Título: Programación drivers
Publicado por: FermatsTheorem en 31 Octubre 2017, 04:58 am
Buenas noches,

Seguramente esta pregunta sea demasiado básica o general, pero me gustaría que me orienten un poco.
Estoy interesado en la programación de drivers, y me gustaría saber algún punto de partida para esto. Ya sea aprender algún lenguaje en particular, arquitectura de computadoras, electrónica digital, etc.
No estoy buscando un tutorial que me explique como hacer algo al estilo receta, sino que puedo empezar por estudiar, para en algún futuro poder hacer algo medianamente simple pero funcional.

Espero que me puedan orientar, ya que no encontré demasiado material de esto, por lo menos, no desde el punto de vista orientativo.

Muchas gracias. Un saludo.


Título: Re: Programación drivers
Publicado por: Eternal Idol en 31 Octubre 2017, 07:27 am
Efectivamente la pregunta es muy generica, necesitas saber C (y si sabes ensamblador mucho mejor para depurar y comprender).


Título: Re: Programación drivers
Publicado por: FermatsTheorem en 31 Octubre 2017, 15:03 pm
Muchas gracias por la respuesta.

Asumo que la pregunta es bastante genérica, ya que como dije en el primer post, no tengo una base de siquiera que es lo que necesito para poder programar un driver.

En cuanto a C, que es lo que nombraste, es el único lenguaje en el que se puede hacer? O por ejemplo, C++ sirve para lo mismo?

Un saludo.


Enviado desde mi XT1563 mediante Tapatalk


Título: Re: Programación drivers
Publicado por: BloodSharp en 31 Octubre 2017, 21:13 pm
En cuanto a C, que es lo que nombraste, es el único lenguaje en el que se puede hacer? O por ejemplo, C++ sirve para lo mismo?

Se puede también en Delphi (aunque no es común) y ensamblador, C++ ni lo pienses tocar para crear un driver...


B#


Título: Re: Programación drivers
Publicado por: Eleкtro en 1 Noviembre 2017, 00:01 am
Estoy interesado en la programación de drivers, y me gustaría saber algún punto de partida para esto. Ya sea aprender algún lenguaje en particular, arquitectura de computadoras, electrónica digital, etc.

Aquí tienes un ejemplo de como puedes desarrollar un driver en modo kernel utilizando el lenguaje C/C++ en la IDE Visual Studio:

  • Write a universal Hello World driver (KMDF) (https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf--driver)

...en la misma página a la izquierda puedes encontrar una breve introducción para el desarrollo de drivers en modo usuario con C/C++ en Visual Studio, y si empiezas a leer desde el tema principal puedes aprender gran cantidad de fundamentos sobre todo aquello que vas a necesitar aprender relacionado con el desarrollo de drivers en general:

  • Getting started with Windows drivers (https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted)

...Ah, y no ignores la recomendación que resalta al principio del artículo antes de empezar a leer el resto de la guía:
Citar
You should already be familiar with the C programming language, and you should understand the ideas of function pointers, callback functions, and event handlers. If you are going to write a driver based on User-Mode Driver Framework 1.x, you should be familiar with C++ and COM.

Saludos.


Título: Re: Programación drivers
Publicado por: Eternal Idol en 1 Noviembre 2017, 07:29 am
En cuanto a C, que es lo que nombraste, es el único lenguaje en el que se puede hacer? O por ejemplo, C++ sirve para lo mismo?

El 99% de los modulos de modo Kernel son desarrolldaos en C y estoy hablando de software serio no de proyectos amateurs por hobby que se pueden escribir en casi cualquier lenguaje (lo tienen que entender otros programadores de Kernel y hay que darle soporte, por eso en ensamblador como mucho se hacen algunas rutinas). C++ no se suele usar para programar modulos de modo Kernel aunque al menos en Windows es perfectamente factible mas no recomendado para quien apenas comienza (no se pueden usar todas las caracteristicas de C++ por no estar disponibles, no hay RTL, hay que tener cuidado con los templates y en que sección de codigo los ubica el compilador, etc.).

PD. C/C++ no es nada, el ejempo dado es codigo C (si fuera C++ fallaria al enlazar DriverEntry) y UMDF trabaja en modo Usuario - y no Kernel - como su nombre lo indica.