Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Shrick en 22 Noviembre 2009, 17:38 pm



Título: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 22 Noviembre 2009, 17:38 pm
Tengo la curiosidad de saber que si siempre que se va a crear programillas como por ejemplo pues el notepad mismo, es totalmente necesario usar la WinAPI o ¿hay otras formas de hacerlo?.

Un Saludo.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Eternal Idol en 22 Noviembre 2009, 17:47 pm
Si, independientemente del lenguaje tenes que usar los servicios del S.O. (o en su defecto una libreria que los encapsule).


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 22 Noviembre 2009, 17:58 pm
Imagínate que quiero usar desde ensamblador la librería stdio, esto luego lo traduciría a funciones de WinAPI?

Un Saludo.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Eternal Idol en 22 Noviembre 2009, 18:01 pm
Si, en realidad la RTL esta programada de tal manea que usa los servicios del S.O. en cuestion siempre que sea necesario, podes comprobarlo depurando un programa escrito en C/C++.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 22 Noviembre 2009, 18:46 pm
Es bueno saberlo ;D , supongo que esto también se aplicara a lo mismo en los demás sistemas operativos que harán uso de API de POSIX, si estoy en GNU/Linux. Era por curiosidad porque no tenia ni idea de que esto funcionaba así, ni no hacia más que ver código en ASM, las cuales todas usaban la API de Windows, por lo que veo los lenguajes con librerías, solo nos proporcionan una abstracción del ensamblador y de la API del SO, respectivamente.
Yo la verdad es que de sistemas operativos a un nivel profundo ni papa, dentro de un año si todo sale como debiera me voy a comprar y leer el libro de sistemas operativos de Tenambaum y me entero un poco más del tema.

Un Saludo.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Eternal Idol en 22 Noviembre 2009, 19:01 pm
Exactamente, en GNU/Linux podes ver como pthread usa los servicios futex o clone por ejemplo.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 22 Noviembre 2009, 20:12 pm
Una última pregunta.

Tomemos por ejemplo la función opendir() dentro de dirent.h (http://en.wikipedia.org/wiki/Dirent.h) (POSIX).

Cuyo prototipo es:

Código
  1. DIR* opendir(const char* dirname)

Se supone que como es una función que esta incrustado dentro del kernel tengo total libertad para programar esta función.

Esto se podría programar en C, así a pelo o ¿se usa ensamblador?, es decir por ejemplo:

Tengo en el VTOC (o como se llame la tabla de contenidos, que tiene referencias a ficheros), voy a la dirección donde este el VTOC, que estará puesto a pelo en el disco duro, y supongo que para acceder al disco duro habrá una dirección o direcciones que puedo usar como referencia estando esta en la RAM(si mal no recuerdo esto era mapeo de memoria) y a través de esa referencia llegar al VTOC, mediante el cambio de valor de esa referencia, que apuntaría VTOC, y luego buscaría la linea que correspondiera con dirname, el bloque que esta al lado, que se supone que es la dirección y tamaño, entonces cambiaría el puntero de disco duro a esa dirección y devolveria el valor del puntero.

¿Seria algo así no?.

Puedo deducir que si esto es así, las demás las podría deducir, y asi he aprendido un poquito más sobre sistemas operativos xD .

Un Saludo.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Eternal Idol en 22 Noviembre 2009, 20:29 pm
No veo que opendir sea un servicio. ¿Lo encontras en /usr/include/asm/unistd.h?

Practicamente nada se programa en ensamblador ya que no es portable.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 22 Noviembre 2009, 20:54 pm
No solo encuentro un montón de #define con valores estilo:

Código
  1. #define __NR_eventfd 323
  2. #define __NR_fallocate 324
  3. #define __NR_timerfd_settime 325
  4. #define __NR_timerfd_gettime 326
  5. #define __NR_signalfd4 327
  6. #define __NR_eventfd2 328
  7. #define __NR_epoll_create1 329
  8. #define __NR_dup3 330
  9. #define __NR_pipe2 331
  10. #define __NR_inotify_init1 332
  11. #define __NR_preadv 333
  12. #define __NR_pwritev 334
  13. #define __NR_rt_tgsigqueueinfo 335
  14. #define __NR_perf_counter_open 336
  15.  

Entonces cuales son exactamente los servicios, es decir, los prototipos de las funciones de la API del SO?

Lo puse porque ponía que estaba dentro del estándar POSIX, y de hay deduci malamente eso.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Eternal Idol en 22 Noviembre 2009, 22:52 pm
Lo servicios son esos justamente, con sus respectivos numeros en la version especifica del Kernel que tengas. Como te decia antes en GNU/Linux podes ver como pthread (http://en.wikipedia.org/wiki/POSIX_Threads) usa los servicios futex o clone por ejemplo.

No soy un experto en *NIX justamente pero supongo que habra funciones POSIX que sean servicios directamente implementados y otras que esten basadas en otros servicios.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 23 Noviembre 2009, 00:03 am
Pues podrías ponerme un prototipo función o servicio de Windows (que supongo que si controlaras), que no derive de otros, es que asi como lo dices si busco servicio en google me sale esto: http://www.wininfo.com.ar/main.html (http://www.wininfo.com.ar/main.html), que no creo que sea exactamente eso, es solo para saber..., nada más por si algún día me entra la locura y creo un servicio básico para algún UN*X, para ver como funciona.

Un Saludo.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Eternal Idol en 23 Noviembre 2009, 00:10 am
Aca los tenes (nada que ver con ese enlace que dejaste):
http://www.metasploit.com/users/opcode/syscalls.html

Dudo muchisimo que jamas agregues un servicio en un *NIX (salvo que se refiera a lo del enlace, un demonio).


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 23 Noviembre 2009, 14:44 pm
Hombre no veo imposible coger el kernel de Minix o algún otro un*x "sencillo", mirar como programa lo servicios, y crear yo uno que escriba en el disco duro "hola mundo" cuando lo llame, que sea difícil es otra cosa.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Eternal Idol en 23 Noviembre 2009, 14:47 pm
No imposible pero si 100% inutil, ya existen los servicios para hacer eso correctamente.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: Shrick en 23 Noviembre 2009, 14:58 pm
Ya lo se es simplemente inútil, porque habrá eso y de forma más eficiente, si lo hiciera seria claramente con un fin didáctico, para ver como demonios el SO hace las funciones de la nada, me apuesto lo que quieras que luego me serviría para otra cosa, te permite tener una visión más amplia, esto también me ha pasado con otro asunto, que ya esta hecho y rehecho tropecientasmil veces, pero del que si no lo haces, es imposible que puedas avanzar en el tema, pongo la mano sobre fuego sobre esto último.


Título: Re: Pregunta sobre ASM y WinAPI
Publicado por: dark_hat en 27 Noviembre 2009, 14:16 pm
Las Apis en Linux se basan normalmente en la int 80h http://www.int80h.org/ (http://www.int80h.org/). Si quieres programar una api en linux pues claro no lo vas a hacer con un elf, sino q tendrás que agregar el código en el kernel y volver a compilarlo.
Las apis están declaradas en el kernel de esta forma si no me equivoco
Código:
asmlinkage long sys_nombreapi()
{
...
}
Buscan donde están y añade una nueva api para probar. También hay un archivo en el code del kernel en el que pone de cada api que número es (porque cada api se llama dandole a EAX su número y después haciendo un int 80h), ahí también tendrás que añadir tu API y el número que le das.