Linux palvelimet: Automaatio ja ohjelmointiympäristöt.

Kirjoita ja suorita “Hello World” kolmella eri kielellä.


1) Python 3:

Aloitamme ohjelmoinnin luomalla kansion Python koodeja varten ja tarkistamme linuxin päivitykset:

cd
mkdir -p Koodit/Python
cd Koodit/Python
sudo apt-get update
sudo apt-get upgrade

Seuraavaksi luomme tiedoston jonne kirjoitamme koodin:

nano hello.py
print("Hello World!")

Pythonissa print() on valmis metodi, joka kirjoittaa parametrikseen asetetun numeron tai stringin IDE:n konsoliin tai Linux terminaaliin.

Tallenna ja poistu nanosta Ctrl-x:llä. Kun Nano kysyy haluatko tallentaa valitse y. Seuraavaksi testaamme koodin komennolla python3 hello.py. Tämä tuottaa terminaaliin tekstin “Hello World!”. Koodi toimii.


2) C++:

Aloitamme taas luomalla kansion C++ koodeja varten:

cd
mkdir -p Koodit/C++
cd Koodit/C++

Seuraavaksi luomma tiedoston ja koodin:

nano hello.cc
#include 
using namespace std;

int main () {
  cout << "\nHello World!\n\n";
  return 0;
}

Koodissa ensimmäisellä rivillä ilmoitamme, että käytämme C/C++/yms kielien input/output streamia, johon kuuluvat esim cin ja cout komennot. Toisella rivillä ilmoitamme, että käytämme standardi namespacea, josta käyttämämme cout komento löytyy iostreamista.
Seuraavaksi siirrymme itse ohjelmaan. Jokainen C ohjelma alkaa main() metodilla, jonka palautusarvona on int. Metodin sisällä meillä on cout << komento ja sille “Hello World!” string. cout toimii samalla tavalla kuin pythonin print, eli kirjoittaa terminaaliin parametristringin. Lopulta katkaisemme main() metodin palauttamalla nollan.

Seuraavaksi tarkistamme, että linuxistamme löytyy g++ C compiler:

whereis c++
#Tulos:
c++: /usr/bin/c++ /usr/include/c++ /usr/share/man/man1/c++.1.gz

which c++
#Tulos:
/usr/bin/c++

dpkg -l | grep g++
#Tulos:
ii g++                                   4:5.3.1-1ubuntu1
       amd64        GNU C++ compiler
ii g++-5                                 5.4.0-6ubuntu1~16.04.9
       amd64        GNU C++ compiler

Tämä tarkoittaa, että C compiler on kunnossa. Seuraavaksi rakennamme koodistamme a.out tiedoston, nimeämme sen uudelleen ja testaamme sen toiminnan:

c++ hello.cc
ls
mv a.out hello
./hello

Tämä tuottaa terminaaliin tekstin “Hello World!”. Koodi toimii.


3) Assembly:

Tämä assembly koodi on tarkoitettu 64-bittisille linux järjestelmille ja Intel prosessoreille eikä mahdollisesti toimi muissa järjestelmissä ilman emulaattoreita tai virtuaalikoneita. Aloitamme luomalla kansion Assembly projekteille ja asennamme Nasm compilerin paketinhallinnasta.

cd
mkdir -p Koodit/Asm
cd Koodit/Asm
sudo apt-get install nasm

Seuraavaksi luomme .asm tiedoston ja kirjoitamme sinne assemblykoodin. Kannattaa verrata hello.asm tiedostoa edellisen tehtävän hello.cc tiedostoon niin näet kuinka Assembly poikkeaa C++:sta, tai lähes mistä tahansa High-Level kielestä:

nano hello.asm
section .data
    msg db      "Hello World!"

section .text
    global _start

_start:
    mov     rax, 1
    mov     rdi, 1
    mov     rsi, msg
    mov     rdx, 13
    syscall
    mov    rax, 60
    mov    rdi, 0
    syscall

Kahdella ensimmäisellä koodirivillä luomme .data sektion, jonka sisään lisäämme stringin “Hello World!”. Voimme käyttää tätä sektiota nyt muualla koodissa kutsumalla sitä “msg” kutsulla. Seuraavaksi luomme sektion .text, joka sisältää komennon _start, joka käynnistää itse ohjelman. _start komennon sisällä meillä on sarja mov ja syscall komentoja. Mov komento siirtää dataa prosessorin muistin rekisteristä toiseen, tai luo sinne dataa. Koodissa luomme aluksi rax rekisterissä pohjan syscall toiminnolle, lisäämme syscalliin tarvittavat kolme parametriä, joista keskimmäinen on “Hello World!” viestimme ja suoritamme syscallin, joka antaa prosessorille ohjeen suorittaa jokin toiminto. Lopuksi lähetämme syscalliin käskyn lopettaa käynnissä oleva operaatio ja suoritamme uuden syscallin.

Seuraavaksi rakennamme koodista ohjelman nasm compilerilla ja suoritamme sen:

nasm -f elf64 -o hello.o hello.asm
ld -o hello hello.o
./hello

Terminaaliin ilmestyy teksti “Hello World!”. Koodi toimii.


LINKIT:
Tehtävänannot
https://www.python.org/doc/
http://www.cplusplus.com/doc/tutorial/
https://en.wikipedia.org/wiki/Assembly_language
http://0xax.blogspot.fi/2014/08/say-hello-to-x64-assembly-part-1.html

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s