Hardware y C/C++

Iniciado por lcclps, 18 Enero 2016, 00:11 AM

0 Miembros y 1 Visitante están viendo este tema.

lcclps

Buenos días/tardes/noches usuarios.
Como bien sabemos todos, un buen conocedor de ASM puede controlar el hardware del PC, casi a su antojo, si no fuera por lo pesado y/o complejo que puede llegar a ser trabajar en ASM. Además, de la pesada tarea de traducir el ASM de un procesador al de otro, para que tu código funcione en dos maquinas diferentes.


Sin embargo, hace poco recuerdo haber leído por internet, que en C, también se pueden hacer todo lo que puedes hacer en ASM.
- Sinceramente, discrepo de eso del "todo", pero.... quizás no es que no se pueda hacer todo, si no, que yo no se hacerlo.

Y a todo eso.....
¿Sabeis si en C se puede controlar el Hardware, sin necesidad de hacer uso de ASM en ningún momento?
[/i]
Y me refiero a.. control "avanzado", como por ejemplo: controlar el ventilador, ya sea su velocidad, o el simple hecho de que esté encendido o no.

- Gracias de antemano.

Eternal Idol

No es parte del standard aunque hay formas (inline assembly o libreria en assembly por ejemplo).

Igual ni assemby ni C/C++ podran acceder directamente al hardware en un S.O. moderno desde modo Usuario.
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

lcclps

Cita de: Eternal Idol en 18 Enero 2016, 01:12 AM
No es parte del standard aunque hay formas (inline assembly o libreria en assembly por ejemplo).

Igual ni assemby ni C/C++ podrán acceder directamente al hardware en un S.O. moderno desde modo Usuario.

Hum... solamente, en usuario Root, entonces?
- Bueno si, tendría su lógica, en plan "sistema de seguridad"..
Pero utilizando librerías asm.... no solucionaría el problema de la potabilidad de aplicaciones... por que seguiría dependiendo de que la librería esté hecha para procesador X o procesador Y...u.u

- No se para que miro en Yahoo respuestas... es donde leí eso de que en C se puede hacer todo y portable.

Eternal Idol

Cita de: lcclps en 18 Enero 2016, 02:07 AM
Hum... solamente, en usuario Root, entonces?
- Bueno si, tendría su lógica, en plan "sistema de seguridad"..

No, me refiero al nivel de privilegio con el que ejecuta el codigo, para acceder directamente necesitas un modulo de modo Kernel (un driver) y no un programa de modo Usuario.

Cita de: lcclps en 18 Enero 2016, 02:07 AMPero utilizando librerías asm.... no solucionaría el problema de la potabilidad de aplicaciones... por que seguiría dependiendo de que la librería esté hecha para procesador X o procesador Y...u.u

Si el recurso esta expuesto como un archivo no es tan complejo y podes usar compilacion condicional pero lo que es acceder DIRECTAMENTE al hardware es por pura logica una operacion de bajo nivel totalmente dependiente de la arquitectura.

Cita de: lcclps en 18 Enero 2016, 02:07 AM- No se para que miro en Yahoo respuestas... es donde leí eso de que en C se puede hacer todo y portable.

Por definicion C/C++ son portables, siempre que recompiles para cada una de las arquitecturas que quieras soportar ... si usas extensiones no standard no lo es y ahi entra la compilacion condicional.
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

MAFUS

C puede acceder directamente a la memoria, los punteros le dan esa capacidad. Si la máquina mapea el hardware a la memoria C puede acceder así al hardware,  pero eso no es portable ya que depende de cada arquitectura. Si el acceso al hardware no es por memoria C ya no puede acceder a él y se deben usar funciones escritas en ensamblador expresamente para dotar al programa de ese acceso.
Y todo esto en un sistema sin el modo protegido, en caso contrario hay que solicitar permiso al S.O. o cambiar de anillo en el procesador mediante unos códigos ASM específicos.

Zekkk

No entiendo a que te refieres por "acceder al hardware" pero con C/C++ puedes hacer todo lo que puedes hacer con assembly. De hecho la mayoria de compiladores de C/C++ traducen el codigo a assembly. Tambien tu sistema operativo(si usas windows o linux) esta escrito en C con una que otra optimizacion escrita en assembly(el compilador no siempre traduce las cosas de la forma mas eficiente).

En todo caso si quieres controlar la velocidad del ventilador entonces usa la libreria correspondiente del sistema operativo que sea que uses. Si quieres "completo control" sobre el hardware de tu computadora prueba modificar alguna distribucion de linux usando C.

Ese es el tema o me equivoco?

Stakewinner00

#6
CitarDe hecho la mayoria de compiladores de C/C++ traducen el codigo a assembly.
Cualquier compilador genera un ejecutable en ensamblador, sino ya no sería un compilador. Pero no es lo mismo el ensamblador para un intel que para un arm por ejemplo.

CitarTambien tu sistema operativo(si usas windows o linux) esta escrito en C
El kernel de Linux esta en C, el de Windows creo que estaba en C++ si no recuerdo mal, pero bueno.

básicamente, el sistema operativo hace de intermediario con el hardware, este intermediario facilita muchas tareas pero a la hora de hablar directamente con el hardware es un problema.

espero que esto ayude https://es.wikipedia.org/wiki/Anillo_%28seguridad_inform%C3%A1tica%29

Zekkk

Cita de: Stakewinner00 en 19 Enero 2016, 01:10 AM
Cualquier compilador genera un ejecutable en ensamblador, sino ya no sería un compilador.

Para nada. No todos los compiladores traducen el codigo a assembly. Cfront por nombrarte un ejemplo no lo hacia.

Stakewinner00

#8
Cfront convertía C++ a C, yo diría que es más un traductor¿? Pero bueno, quizás me exprese mal.

Zekkk

Todos los compiladores son "traductores".