Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++-ohjelmat ilman käyttöjärjestelmää?

Sivun loppuun

Kentti [27.12.2006 18:35:12]

#

Mielenkiinnosta kysyn, että saako C++:lla tehdyn ohjelman toimimaan koneella, millä ei ole käyttöjärjestelmää. Ohjelma olisi käännetty Windowsilla.

Ohjelma olisi jotain tätä tasoa:

#include <stdio.h>

int main() {
  puts("Terve");
}

Vai olisiko juuri niin, että tuon tasoinen ohjelma ei toimisi, vaan pitäisi olla kaikkea lisähärpäkettä mukana?

Ja ennen kuin joku kysyy, mitä tällaisella tekisin, niin vastaus on, että aivan mielenkiinnosta :)

Metabolix [27.12.2006 18:46:28]

#

Ei, ei toimi. Ensinnäkin jonkun pitää lukea se binaari jostain muistiin ja hypätä mainin aloituskohtaan. Eiväthän Windowsin ja Linuxinkaan binaarit toimi tuolla tavalla ristiin. Sitten jostakin pitää löytää tuo käytetty puts-funktio, joka siis toimii aivan eri tavalla riippuen siitä, tulostaako se Windowsin komentorivi-ikkunaan, DOSissa suoraan ruudulle vai jossakin muualla jollakin muulla tavalla (mitenhän se nyt Linuxissakaan toimii, mutkikkaampi homma).

Kuitenkin käyttöjärjestelmän voi suurelta osin halutessaan ohjelmoida C++:lla. Assembly on tarpeen muutamassa perustavanlaatuisessa asiassa, loput voi tehdä C++:lla. Kuitenkaan mitään peruskirjastoja ei voi käyttää, ennen kuin on ohjelmoinut ne. :)

Kentti [27.12.2006 18:59:01]

#

Metabolix kirjoitti:

Kuitenkin käyttöjärjestelmän voi suurelta osin halutessaan ohjelmoida C++:lla. Assembly on tarpeen muutamassa perustavanlaatuisessa asiassa, loput voi tehdä C++:lla. Kuitenkaan mitään peruskirjastoja ei voi käyttää, ennen kuin on ohjelmoinut ne. :)

Eli tuohon tarttuen, perusta asmilla, loput millä tahansa, "järjestelmäriippumattomalla" kielellä (ei mtään system() komentoja C:llä esim :)

Mutta tuota

Metabolix kirjoitti:

Ensinnäkin jonkun pitää lukea se binaari jostain muistiin ja hypätä mainin aloituskohtaan. Eiväthän Windowsin ja Linuxinkaan binaarit toimi tuolla tavalla ristiin. Sitten jostakin pitää löytää tuo käytetty puts-funktio, joka siis toimii aivan eri tavalla riippuen siitä, tulostaako se Windowsin komentorivi-ikkunaan, DOSissa suoraan ruudulle vai jossakin muualla jollakin muulla tavalla (mitenhän se nyt Linuxissakaan toimii, mutkikkaampi homma).

ihmettelen. Kyllä sen uskon, ettei toimi, mutta eikös se ole siihen binaariin sisällyttänyt ne kirjastot, ja binaarissa sitten on ne funktiot sen kirjaston sisällyttämisen puolesta, josta se sitten suorittaa halutun komennon?

Edit: asmista sen verran, että olenko siinä oikeassa, että se on käyttöjärjestelmäriippumatonta, eli sama koodi toimisi Windowsilla, Linuxilla, jne. ? (Sitten se mistä riippuu onkin koneen osat.. vai?)

Metabolix [27.12.2006 20:19:26]

#

Onhan C:kin järjestelmäriippumaton kieli, vielä asmiakin paremmin, kun vain et käytä yhtäkään sellaista funktiota, jota et ole itse kirjoittanut. Asmiksi C-kääntäjäkin ohjelman kääntää, asm kun on symbolinen konekieli eli samaa tavaraa kuin binaari mutta käsitettävässä muodossa. (Sitten EXEt ja ELF-binaarit ovat oma juttunsa vielä...)

Se, missä määrin kirjasto sisältyy ohjelmaan, riippuu kääntäjästä ja sen asetuksista. Onhan olemassa dynaamisia kirjastoja (DLL), ja vastaavalla tavalla voinee kutsua myös järjestelmän funktioita. Ja mitäpä hyötyä siitä kirjastosta on, jos se on väärään asiaan? Windows-ohjelmassa kirjasto (sikäli kuin se edes exeen kuuluu) osaa tulostaa Windowsin komentorivi-ikkunaan, joka on aivan eri laitos kuin se PC:n tekstitila, johon kone ennen käyttöjärjestelmän lataamista päätyy.

Kentti [27.12.2006 20:34:00]

#

Eli... C++, jne toimii millä tahansa käyttöjärjestelmällä tahi ilman mitään, jos käyttää vain kielen sisään rakennettuja ominaisuuksia? Eli joku ohjelma

struct TIETUE {

  int pp, kk, vv;
};

int main() {

  TIETUE muuttuja = {27, 12, 2006};

  // Mitenköhän sitä tulostaisi?
  // esim. muuttuja.pp:n

  return 0;
}

Tästä tosiaankin tuli mieleen, että miten pystyisi kirjastoja käyttämättä tekemään funktion, joka tulostaa tekstiä näytölle?

Mutta tuo ylläoleva periaatteessa toimisi, siitä ei kyllä kellekään olisi mitään iloa :)

Metabolix [27.12.2006 20:38:51]

#

Periaatteessa joo, paitsi että sinun pitää edelleenkin saada jokin kutsumaan tuota mainia (eli ns. käynnistämään ohjelma). Siihen tarvitset sitä sopivaa asmia (tai käyttöjärjestelmän).

Mitenköhän tuossa tulostaisi... No katso vaikka PutkaOS, http://putkaos.dy.fi/.

Kentti [27.12.2006 20:47:56]

#

Hmm.. Eli ilman asmia (tjs) ei oikein voi tehdä mitään "näkyvää" ohjelmaa ilman käyttistä.

Muuten, en itse asiassa löytänyt tuosta PutkaOS:sta mitään kohtaa, josta lähdekoodin järkevästi saisi, jos se on saatavaksi tarkoitettu :)
Sivun reunassa olisi poikaa "Lataa"-linkki :)

Metabolix [27.12.2006 21:05:28]

#

Jos kelpaa vaikkapa GRUB lataajaksi, niin asmia ei tosiaan tarvitse kuin nimeksi.

SVN:llä noita lähdekoodeja jaetaan, kun ne muuttuvat kuitenkin sen verran elävästi, ettei niitä kannata tarkemmin paketoida. Onhan siellä WebSVN.

Megant [27.12.2006 21:09:34]

#

Kentti kirjoitti:

Muuten, en itse asiassa löytänyt tuosta PutkaOS:sta mitään kohtaa, josta lähdekoodin järkevästi saisi, jos se on saatavaksi tarkoitettu :)
Sivun reunassa olisi poikaa "Lataa"-linkki :)

No tuolla on tuo WebSVN-linkki, jonka takana voi selailla sorsia.
Hommaa joku subversion-clientti ja lataa sorsat sillä.

Mielestäni Lataa-linkille ei olisi mitään käyttöä.
Varsinaista näkemistä ei vielä ole, ja jos on valmis tutkimaan voi samalla vaivalla hommata svn-clientin.
Sorsatkin saattavat päivittyä vähän väliä.
Voisinhan tietenkin tehä skriptin, joka laittaa jonnekkin päivittäisiä svn-snapshotteja muttenpa nyt kuitenkaan taida...

Kentti [27.12.2006 23:10:06]

#

Juu ny löyty :)

En vaan osannu ettiä tuon nimen alta :)

Kentti [28.12.2006 16:01:43]

#

Assembly alkoi kiinnostamaan :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta