Pregunta sobre ASM y WinAPI

Iniciado por Shrick, 22 Noviembre 2009, 17:38 PM

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

Shrick

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.
Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .

Eternal Idol

Si, independientemente del lenguaje tenes que usar los servicios del S.O. (o en su defecto una libreria que los encapsule).
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

Shrick

Imagínate que quiero usar desde ensamblador la librería stdio, esto luego lo traduciría a funciones de WinAPI?

Un Saludo.
Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .

Eternal Idol

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++.
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

Shrick

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.
Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .

Eternal Idol

Exactamente, en GNU/Linux podes ver como pthread usa los servicios futex o clone por ejemplo.
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

Shrick

Una última pregunta.

Tomemos por ejemplo la función opendir() dentro de dirent.h (POSIX).

Cuyo prototipo es:

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.
Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .

Eternal Idol

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.
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

Shrick

#8
No solo encuentro un montón de #define con valores estilo:

#define __NR_eventfd 323
#define __NR_fallocate 324
#define __NR_timerfd_settime 325
#define __NR_timerfd_gettime 326
#define __NR_signalfd4 327
#define __NR_eventfd2 328
#define __NR_epoll_create1 329
#define __NR_dup3 330
#define __NR_pipe2 331
#define __NR_inotify_init1 332
#define __NR_preadv 333
#define __NR_pwritev 334
#define __NR_rt_tgsigqueueinfo 335
#define __NR_perf_counter_open 336


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.
Ubuntu User
Pascal (2008/2009)
C/C++ (2009/¿?)
8080 Assembler (2009/2010)
MIPS I Assembler (2010/¿?)

Todo lo que yo haga o diga esta bajo:



No pertenece ni a mi ni a nadie :P .

Eternal Idol

#9
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 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.
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