SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: su - en Jueves 29 de Diciembre de 2005, 20:27

Título: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Jueves 29 de Diciembre de 2005, 20:27
Hola.
Como puedo apagar la maquina, no el OS, si no el hadware?
No se asm, pero si me guian vere que puedo hacer, esto no es para una tarea, si no que estoy haciendo una rsh y queria una apagada total al ejecutar X comando.
Gracias.  ;)
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Jueves 29 de Diciembre de 2005, 20:59
No hay una instruccion que haga eso y el manejo del hardware en ese sentido es algo relativamente nuevo, si recordas 9x o NT 4.0 te dicen "You can shutdown the computer now" o algo si, ellos por si mismos no lo hacen.
 
Aca tenes el standard que se usa en NT 5.0 (Windows 2000) en adelante:
http://www.acpi.info/ (http://www.acpi.info/)


En fin, es bastante complejo (600 y pico de paginas)  :whistling:

Hace muy poco hubo una pregunta parecida, hacerlo con ayuda del S.O. es mucho mas simple:
http://foros.solocodigo.com/index.php?showtopic=18814 (http://foros.solocodigo.com/index.php?showtopic=18814)
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Jueves 29 de Diciembre de 2005, 21:15
Ah, me olvide de decirlo, pero no lo podes hacer desde modo usuario en un S.O. de 32 bits (Linux, NT).  :smartass:
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Bopo en Jueves 29 de Diciembre de 2005, 21:23
Cita de: "Eternal Idol"
Ah, me olvide de decirlo, pero no lo podes hacer desde modo usuario en un S.O. de 32 bits (Linux, NT).  :smartass:
Si es que te sale lo de que puede apgar el equipo, con el puerto paralelo o serial puedes ahcer un temoralizador, que despues de un rato de mandar a apagar el software (1 minuto), active un rele y apaque el pc :)
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Jueves 29 de Diciembre de 2005, 21:26
Cita de: "Bopo"
Si es que te sale lo de que puede apgar el equipo, con el puerto paralelo o serial puedes ahcer un temoralizador, que despues de un rato de mandar a apagar el software (1 minuto), active un rele y apaque el pc :)
Realmente no entiendo muy bien lo que decis (la redaccion en particular). Pero de cualquier manera no parece ser una solucion basada en codigo de ensamblador ejecutandose en modo usuario.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Jueves 29 de Diciembre de 2005, 21:28
Gracias, mirare el link.
A, si, resulta que el poweroff que estoy haciendo, primero mata siertos procesos, luego apaga swap y desmonta particiones y discos, lo unico que faltaria seria matar el kernel que me supongo que estaria corriendo en memoria, y lo que nesecito, mi pregunta es simplemente como apagar el hadware, haci que lo estaria haciendo como root, claro esta, por quetengo que matar procesos.
nuevamente gracias.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Jueves 29 de Diciembre de 2005, 21:33
Cita de: "su -"
Gracias, mirare el link.
A, si, resulta que el poweroff que estoy haciendo, primero mata siertos procesos, luego apaga swap y desmonta particiones y discos, lo unico que faltaria seria matar el kernel que me supongo que estaria corriendo en memoria, y lo que nesecito, mi pregunta es simplemente como apagar el hadware, haci que lo estaria haciendo como root, claro esta, por quetengo que matar procesos.
nuevamente gracias.
El kernel no lo podes matar, no es un proceso, es codigo cargado en memoria.

Apagar una PC es una cosa muy dificil y no tiene que ver con que estes bajo la cuenta de root sino el modo de ejecucion privilegiado o no. Tendrias que estar en modo kernel osea hacer un driver.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Jueves 29 de Diciembre de 2005, 21:49
Hmmm... ya veo, esque lo estoy haciendo en base a minit0-10 que esta hecho en C y es solo para Unix-like.
Buscare en la red mas al respecto para no molestarlos con estas preguntas de principiantes y le cometare al respecto. ;)
 :gracias:
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Jueves 29 de Diciembre de 2005, 22:28
Cita de: "su -"
Hmmm... ya veo, esque lo estoy haciendo en base a minit0-10 que esta hecho en C y es solo para Unix-like.
Buscare en la red mas al respecto para no molestarlos con estas preguntas de principiantes y le cometare al respecto. ;)
 :gracias:
No encontre nada en la web con ese nombre como para verlo pero de cualquier manera no me referia a Windows en particular. El libro UNIX Programacion avanzada comienza asi:

"UNIX es el nucleo de un sistema operativo de tiempo compartido. El nucleo del sistema es un programa que siempre esta residente en memoria y ..."
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Viernes 30 de Diciembre de 2005, 00:49
Si, te entiendo, eso es correcto, esque cundo digo matar me refiero a dejarlo "fixed" o desabilitarlo para su uso en ese momento, bueno eso es lo que menos me interesa por ahora.
Este es el link de minit:
http://www.fefe.de/minit/ (http://www.fefe.de/minit/)
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Viernes 30 de Diciembre de 2005, 01:26
Ya hice algo para Gnu/Linux, no se si esto sea, pero tan solo me colgo la maquina.
El link para bajarlo http://www.solocodigo.com/vftp/Varios/phalt/phalt.tar.bz2 (http://www.solocodigo.com/vftp/phalt.tar.bz2)
para ver los codigos: unzip phalt.
ejecutar como root.
Por sierto me falta la parte en asm del puf magico, pero eso lo estoy biendo, apenas.
Mieronlo y critiquenlo, que todavia no es algo bueno.
Garacias.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Viernes 30 de Diciembre de 2005, 10:14
Cita de: "su -"
Si, te entiendo, eso es correcto, esque cundo digo matar me refiero a dejarlo "fixed" o desabilitarlo para su uso en ese momento, bueno eso es lo que menos me interesa por ahora.
Este es el link de minit:
http://www.fefe.de/minit/ (http://www.fefe.de/minit/)
No podes deshabilitar el Kernel ... no funcionaria absolutamente nada. De entrada las interrupciones no serian manejadas correctamente.

En la descripcion del programa ese no veo nada que tenga que ver con un apagado de una PC.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Viernes 30 de Diciembre de 2005, 10:25
Cita de: "su -"
El link para bajarlo http://www.solocodigo.com/vftp/Varios/phalt/phalt.tar.bz2 (http://www.solocodigo.com/vftp/phalt.tar.bz2)
No baja el archivo.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Viernes 30 de Diciembre de 2005, 16:17
:whistling:
Oops, link: http://www.solocodigo.com/vftp/Varios/phalt/phalt.tar.bz2 (http://www.solocodigo.com/vftp/Varios/phalt/phalt.tar.bz2)
Pero al igual, el mio no funciona de nada, solo cuelga la maquina, se me olvido el /dev/console.
 :hola:
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Viernes 30 de Diciembre de 2005, 16:43
A, si, me falto:
syscall &SYS_reboot, 0xfee1dead, 0x28121969, 0x4321fedc;
en perl, hace el syscall segun SYS_reboot de sys/syscall.h (Linux).
Si hay algun otro modo de hacerlo, estoy dispuesto a aprender.
Gracias.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Viernes 30 de Diciembre de 2005, 16:50
Cita de: "su -"
A, si, me falto:
syscall &SYS_reboot, 0xfee1dead, 0x28121969, 0x4321fedc;
en perl, hace el syscall segun SYS_reboot de sys/syscall.h (Linux).
Si hay algun otro modo de hacerlo, estoy dispuesto a aprender.
Gracias.
Un syscall en Linux es un int 80h pero veo que pones reboot y no shutdown  :whistling: De cualquier manera eso no es en assembly, supongo que no podes hacerlo en assembly desde Perl.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: su - en Viernes 30 de Diciembre de 2005, 17:20
Si, si puedo, usando Inline::ASM, la intro dice:
you can mix different assembler syntaxes in the same file!
Por eso postee aqui, el foro de asm, porque segun lei estos syscalls se hacen mejo con asm que con C.
A, si, remodifique los codigos y ya si apaga, pero por una rara razon se auto inicia y corre nuevamente el bash, creo que es porque no esta desmontando disco y porque init no puede sr matado por root con kill, en fin ahi estoy tratando.
A, si como se haria en ASM?
Gracias, la idea es poner este codigo en la secion de Codigo Fuente de SoloCodigo.
Título: Re: Puf! Literalmente Apagar La Maquina
Publicado por: Eternal Idol en Viernes 30 de Diciembre de 2005, 18:51
Cita de: "su -"
Si, si puedo, usando Inline::ASM, la intro dice:
you can mix different assembler syntaxes in the same file!
Por eso postee aqui, el foro de asm, porque segun lei estos syscalls se hacen mejo con asm que con C.
A, si, remodifique los codigos y ya si apaga, pero por una rara razon se auto inicia y corre nuevamente el bash, creo que es porque no esta desmontando disco y porque init no puede sr matado por root con kill, en fin ahi estoy tratando.
A, si como se haria en ASM?
Gracias, la idea es poner este codigo en la secion de Codigo Fuente de SoloCodigo.
Una cosa es apagar, en la cual necesitas darle al boton manualmente y otra reiniciar.

Para hacerlo en assembly necesitarias saber a que servicio se corresponde (estan en unistd.h segun dice mi libro) a la operacion que queres hacer y llamarla de esta manera:

Código: Text
  1.  
  2. mov eax, operacion
  3. mov ebx, primer_parametro
  4. mov ecx, segundo_parametro
  5. mov edx, tercer_parametro
  6. int 80h
  7.  
  8.  

Obviamente los parametros dependen de la operacion que quieras hacer.