Archive for the Category ◊ ROSEdu ◊

[TechBlog] Stack Allocation
Sunday, December 18th, 2011 | Author:

[Originally posted on techblog.rosedu.org]

Stack space is the part of each process’ virtual memory where function arguments and return addresses are stored, along with local variables declared within a function. Usually, the stack begins at the high address space of the virtual memory and grows down.

At every function call, a new stack frame is created on the stack. It contains the parameters sent to the function, the return address (the address of a code in the caller function) and the locally declared variables.

For each function call, the SP/ESP (Stack Pointer/Extended Stack Pointer) is set so the stack has a big enough size to accommodate local variables. For example, in theory, if you have a local char variable and an int variable, the SP should be set (moved) to 5 bytes.

In practice, the compiler will allocate stack space a little different than expected. It will allocate local variables space in increments of a fixed size, so sometimes having two int variables or three int variables will be the same.

As an example, gcc will allocate in increments of 16 bytes. Let’s make an experiment… we take a simple C program and turn into assembly code.

The C file looks something like this:

int main(void)
{
	int a=1, b=2;
	return 0;
}

The variables must be used after declaration or they will be ignored by the compiler.

The resulting assembly code (with an gcc -S) looks like this:

main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$16, %esp
	movl	$1, -4(%ebp)
	movl	$2, -8(%ebp)
	movl	$0, %eax
	leave
	ret

Notice the subl instruction that clears 16 bytes in the stack space by decrementing the ESP. Those 16 bytes are enough for four 32bit integers. If you have 1,2,3 or 4 local variables declared (and used), you get those 16 bytes.

If we declare 5 integers, the allocated space will now be 32bytes. Same thing for 6, 7, or 8. If we have 9 to 12 integers the compiler will allocate 48 bytes. An so on…

What if we don’t only have integers? Let’s add some chars.

int main(void)
{
	int a=1, b=2;
	char c=3, d=4;
}

Result:

main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$16, %esp
	movl	$1, -8(%ebp)
	movl	$2, -12(%ebp)
	movb	$3, -1(%ebp)
	movb	$4, -2(%ebp)
	movl	$0, %eax
	leave
	ret

The function would need 10 bytes, but still gets 16. So the allocation is in increments of 16 bytes no matter what.

The question remains why? It has to do with the cache alignment. The compiler will try to structure the memory usage so that the executed code can be easily fetched from memory and cached. A correct alignment will cause minimum cache misses for memory access.

Credits to SofiaN for help with initial observations and tests.

ROSEdu Tech Blog
Saturday, November 26th, 2011 | Author:

This fall, ROSEdu[1] introduced a new project: TechBlog [2]. Since we managed to gather a lot of technical-oriented in our  community, each having things to say about different technologies, we built a place where to share such knowledge in the form of a blog.

Here is my first contribution.

Rescuing executable code from a process [3]. Comments on reddit [4].

A process is an instance of a binary executable file. This means that when you ‘run’ a binary, the code from the storage media is copied into the system’s memory, more precisely, into the process’ virtual memory space. From a single binary, several processes can be spawned.

The virtual memory of a process, made up of pages, is mapped to several things, like shared objects(libraries), shared memory, stack and heap space, read-only space and executable space. A good way to view what is mapped to what is with the pmap utility, or by just looking in the /proc directory hierarchy. The /proc/$PID/maps file (where $PID is the process ID of the targeted process) has the page mappings. Also in /proc/$PID, you can find other useful files, like the exe file that contains a symlink to the executable or the fd directory that contains symlinks to all the files opened as file descriptors in a process.

Except useful information, what can we get out of the procfs? Here is a situation that has been known to happen. You are in a console, with your bash shell, and you manage to delete some important files, like /bin/bash. Without that executable, you cannot run new shells and on a restart, your system will be inaccessible. What can you do?

The code of your bash is no longer on the hard drive, but it is in the virtual memory of the process you are currently running. You can find out what’s the PID of the current shell instance using $$ enviroment variable . Knowing that, you can cd to the /proc/$$ and access the content of the exe file there.

Although the exe file is shown as a link to the original file that is now deleted (thus the link should be broken), if you cat it, you will get its binary content. In fact, all the original binary file. Here is the step by step process:

/bin # md5sum bash
e116963c760727bf9067e1cb96bbf7d3  bash
/bin # rm bash
/bin # echo $$
5051
/bin # cd /proc/$$
/proc/5051 # ls -la exe
lrwxrwxrwx 1 root root 0 2011-11-15 23:47 exe -> /bin/bash (deleted)
/proc/5051 # cat maps
[snip]
00f9e000-00f9f000 rw-p 0001c000 08:01 263123     /lib/i386-linux-gnu/ld-2.13.so
08048000-0810c000 r-xp 00000000 08:01 284760     /bin/bash (deleted)
0810c000-0810d000 r--p 000c3000 08:01 284760     /bin/bash (deleted)
0810d000-08112000 rw-p 000c4000 08:01 284760     /bin/bash (deleted)
[snip]

/proc/5051 # cat exe>/bin/bash_rescued
/proc/5051 # cd -
/bin # md5sum bash_rescued
e116963c760727bf9067e1cb96bbf7d3  bash_rescued
/bin # chmod +x bash_rescured
/bin # mv bash_rescured bash

What other things can we rescue? How about a file that was opened by a process? For example, a video file, opened by a player:

alexj@hathor ~ $ md5sum movie.ogv
9f701e645fd55e1ae8d35b7671002881  movie.ogv
alexj@hathor ~ $ vlc movie.ogv &
[1] 6487
alexj@hathor ~ $ cd /proc/6487/fd
alexj@hathor /proc/6487/fd $ ls -la |grep movie
lr-x------ 1 alexj alexj 64 2011-11-16 00:11 23 -> /home/alexj/movie.ogv
alexj@hathor /proc/6487/fd $ rm /home/alexj/movie.ogv
alexj@hathor /proc/6487/fd $ ls -la |grep movie
lr-x------ 1 alexj alexj 64 2011-11-16 00:11 23 -> /home/alexj/movie.ogv (deleted)
alexj@hathor /proc/6487/fd $ cp 23 /home/alexj/movie_rescued.ogv
alexj@hathor /proc/6487/fd $ md5sum /home/alexj/movie_rescued.ogv
9f701e645fd55e1ae8d35b7671002881  /home/alexj/movie_rescued.ogv

These things are possible because the instances of the files are still kept and used by the kernel. The VFS (the Virtual File System) still has references to the inodes of the files. They won’t be released until the processes will be finished.

[1] http://www.rosedu.org

[2] http://techblog.rosedu.org

[3] http://techblog.rosedu.org/rescuing-executable-code-from-a-process.html

Ixia + UPB = 5 years
Thursday, May 12th, 2011 | Author:

Astăzi a avut loc evenimentul anual Ixia [1] din UPB, ocazie cu care s-au și sărbătorit 5 ani de colaborare între firma de soluții de testare a rețelelor și Universitatea Politehnica București.

Ixia este o firmă din California, dar care, de mai mulți ani are o filială în România, ce s-a dezvoltat foarte puternic. Firma a investit foarte mult în acești ani în colaborarea cu UPB, fiind probabil cea mai vizibilă firmă pentru studenții de la Calculatoare.

Prima investiție, de acum 5 ani, a fost Laboratorul de Cercetare pentru Studenți, sala EG106, sală în care se țin și laboratoarele de Sisteme de Operare (SO – anul 3, Calculatoare). Anul acesta, Ixia a făcut din nou o investiție în laborator prin reînnoirea tuturor calculatoarelor, făcând sala EG106 cea mai modernă din facultate. De asemenea, Ixia sponsorizează și un concurs pentru studneții cursului de Sisteme de Operare 2 (SO2 – anul 4, Calculatoare), oferind premiu pentru cea mai bună temă. Concursul, ce se desfășoară anual, a avut premierea azi și a f0st premiată cu cu tablet Samsung Galaxy persoana ce a făcut cea mai bună impementare a unui protocol de transport în kerneul Linux. Tot în cadrul evenimentului au fost prezentate și proiectele de licență din cadrul facultății ce sunt sponsorizate de Ixia România.

Anul acesta, pe lângă concursul tehnic, Ixia a sponsorizat și un concurs de business planing [2], ce avut un premiu de 20 000$, bani ce vor finanța un start-up. Și pentru că cei de la Ixia au dorit să sponsorizeze și proiectele Open Source, a organizat o excursie pentru studneții de anul acesta ai cursului ROSEdu, CDL [3].

[Personal]

Ixia România este compusă din foarte mulți oameni tineri, majoritate dintre ei (cel puțin cei pe partea tehnică), fiind absolvenți de Calculatoare. Au o politică de promovare și angajare prin care investește foarte mult în oameni noi. Mulți studenți de Calculatoare fie au făcut un internship pe vară, fie s-au angajat la firmă după absolvire. Vara trecută am avut ocazia de a face un intership la Ixia în departamentul de IxOS (kernel development). Experiența a fost una foarte plăcută și Ixia România pare a fi una dintre firmele unde multor oameni le-ar plăcea să lucreze. Și pentru că nu am publicat un articol când am terminat stagiul, îmi pare bine că am ocazia acum.

Thank you, Ixia! And keep it up!

[1] http://ixiacom.com

[2] http://ixiacontest.ro/

[3] http://cdl.rosedu.org/2011/

FOSDEM 2011
Tuesday, February 08th, 2011 | Author:

These days I’m in Bruxelles, .be, at FOSDEM 2011 [1], together with friends from ROSEdu.
The Free and Open Source Developers’ European Meeting is a two day conference that brings together Open Source enthusiasts, stuffs them into a building and waits for them to fight with each other in geekiness.
The two day schedule is very crowded, from 9 AM to 6 PM, with event in 10 rooms at the same time. Alongside the presentations, communities and companies have stands in the hallways. Everyone who is anyone is here. Fedora, Mandriva, CentOS, OpenSUSE, Debian and Ubuntu, Gnome and KDE, Mozilla, OpenOffice and LibreOffice, PostgreSQL, BSD, Perl and many others. You can buy T-Shirts, badges and other geeky souvenirs from practically every stand (I bought a couple of gifts I can’t wait to give). O’Reilly has a huge list of open source related books for sale. CACert.org brought assurers for the Web of Trust (I didn’t get to assure any new people, but I did do some 0 points assurances of other assurers). In the Embedded building, communities/companies like BeagleBoard have a showcase for embedded devices that run Android or other embedded distros.
The presentations were form boring to very interesting, but I didn’t get to see more than a few. The first one I went to was a bout LLVM, a new compiler that is suppose to be the next gcc. Went to one about HTML5 and it was the first time I heard talking about the fact that “HTML5 is here” and not “HTML5 is coming” (I can’t wait to hear the same thing about IPv6) and learned some interesting things about HTML5. One more presentation, on a similar topic was about “The browser as a desktop” and how the web will evolve. Another one was about Google’s Go programming language… interesting, but I still didn’t get why Go was better than other languages. As part of the lightning talks of 15 minutes, an interesting one was about CyaTLS, an implementations similar to OpenSSL, only for embedded devices. Another interesting presentation was one from OpenStack about open source Cloud solutions, but could have used more technical details. But the most interesting presentation for me was the very last one, “How kernel development goes wrong”, from a Linux kernel developer with an inside look into the Linux Development Community.
The event was interesting. talked to some people there (for example some guys from Mozilla Europe that told me about a rising community in the Balkans, so that would Include Romaina, and told him that maybe we might collaborate). I learned about some new things, found out more about already known things. So, overall, it was an interesting experience.

[1] http://fosdem.org/2011

The season of IPv6
Sunday, January 23rd, 2011 | Author:

Săptămânile acestea subiectul IPv6 este foarte discutat, în general datorită veștii că zilele ce urmează, IANA va aloca ultimele adrese IPv4 disponbilie.Chiar și dimineață am citit în newsletter-ul Slashdot de știrea ultimelor zile de IPv4 [1].

Deși de 10 ani se tot discută că trecem la IPv6, nu prea pare să se întâmple pentru că, încă “merge’așa”. Câteodată, mai există inițiative de a promova trecerea la IPv6 cum ar fi World IPv6 Day [2], care este un plan al unor companii mai mari (Google, Yahoo, Facebook) să pună la dispoziție site-urile lor peste IPv6.

Mai aproape de casă, cu ocazia Întâlnirii RLUG (Romanian Linux Users Group) din Ianuarie [3], s-a discutat despre IPv6, ce merge și nu merge într-o prezentare (la care, din păcate, nu am participat). Cei doi ce au ținut prezentarea, rpetre [4] și Cioby de la RLUG, au plusat pe subiect și, în acest weekend, au organizat Atelierul RLUG pe luna Ianuarie [5] pe tema IPv6. Atelierul a avut loc ieri, în laboratorul Ixia din UPB și la acesta am apucat să particip și eu.  A fost interesant, pentru că am discutat despre diverse probleme și soluții legate de IPv6 și am și configurat stațiile din laborator cu acces IPv6 la Internet.

Geek-ul din mine tot tresare când se mai vorbește despre IPv6, așa că a fost interesant Atelierul. Și, deși sunt conștient că va mai dura până vom trece la noul protocol, mi se pare important ca măcar persoanele tehnice să experimenteze cu el.

Prins și eu în febra momentului, azinoapte am stat să reconfigurez tunnelul de la Hurricane Electric [6] prin care aveam și eu o clasă IPv6 rutată pe un server (server care nu mai exista și acum am mutat tunelul pe înlocuitorul său).

[1] http://tech.slashdot.org/firehose.pl?op=view&type=story&sid=11/01/22/057227

[2] http://tech.slashdot.org/story/11/01/12/1549246/Major-Sites-To-Join-lsquoWorld-IPv6-Dayrsquo

[3] http://wiki.lug.ro/%C3%8Ent%C3%A2lnirea_RLUG_Ianuarie_%2711

[4] http://blog.technostoic.net/2011/01/18/rlug-si-ipv6/

[5] http://wiki.lug.ro/Atelier_ianuarie_2011

[6] http://tunnelbroker.net/

Un an de întâlniri RLUG/Prolinux
Friday, November 12th, 2010 | Author:

Există în lume multe LUG-uri, adică Linux User Groups, comunități de oameni care folosesc și promovează Linux. România nu este mai prejos și are și ea o comunitate puternică și destul de veche, RLUG [1]. Unii sunt administratori de sisteme, alții dezvoltatori, angajați la firme mari și mici din IT sau pur și simplu fani Linux pentru acasă, toți sunt pasionați de ce înseamnă Linux. Majoritatea sunt membrii ai altor comunități Open Source din România (cum sunt Fedora România sau Ceata).

Comunitatea se învârte foarte mult în jurul listelor de discuții RLUG. Listele principate sunt destul de tehnice și susținute de oameni care investesc mult timp încercând să îi ajute pe ceilalți contribuind cu lucrurile pe care ei le cunosc despre administrarea sistemelor Linux. De asemenea sunt găsiți și pe IRC.

RLUG pune la dispoziție serverele HTTP/FTP lug.ro, care sunt mirror-uri în România pentru distribuțiile importante de Linux și repository-uri pentru pachete.

Recent, acum aproape un an, în jurul acestei comunități cu tradiție s-a înființat Asociația Prolinux [2]. După cum spune în Statutul Asociației, “Scopul înființării Asociației ProLinux este promovarea și sprijinirea utilizării programelor de calculator cu surse deschise (engl. open source) în rândul utilizatorilor instituționali, industriali și privați din România.”

Din noiembrie 2009, RLUG prin intermediul Prolinux organizează o serie de Întâlniri lunare RLUG [3], în fiecare a doua joi într-un loc business numit Bucharest Hubb [4]. În cadrul acestor întâlniri se țin prezentări despre programe Linux după care se iese la bere pentru socializare. Aseară a avut loc ce-a de-a 13-lea astfel de întâlnire și, cu această ocazie, s-a aniversat un an de întâlniri RLUG/Prolinux. La multe întâlniri!

Mai recent, comunitatea organizează și o serie de Ateliere [5] în care oamenii să vină cu laptopurile și să lucreze pe viu pentru a învăța lucruri noi în Linux. Atelierele vin în completarea întâlnirilor pentru a oferi o parte mai practică. Se intenționează mutarea acestor întâlniri în Politehnică pentru a atrage studenții spre ele și spre linux.

[1] http://lug.ro/

[2] http://prolinux.ro/

[3] http://wiki.lug.ro/Categorie:%C3%8Ent%C3%A2lnirile_RLUG

[4] http://bucharesthubb.com/

[5] http://wiki.lug.ro/Categorie:Atelierele_RLUG

2009 Review: ROSEdu
Wednesday, December 30th, 2009 | Author:

O retrospectivă destul se subiectivă legată de activitățile desfășurate în cadrul grupului nostru din facultate. Part II.

ROSEdu [1] a avut un an cu multe proiecte, unele noi, unele mai vechi, dar continuate din anii trecuți.

În lunile martie, aprilie și mai, s-a desfășurat Cursul de Dezvoltare Liberă [2], prima ediție. Cei 16 studenți ce au participat au fost învățați de membrii ROSEdu și alți invitați cum să dezvolte un software bazându-se pe platforme Open Source.

La sfârșitul lui mai a avut loc a treia ediție a eLiberatica [3], eveniment la care mare parte din ROSEdu a participat. Pentru prima dată, ROSEdu a avut și un stand oficial la conferință, împreună cu alte comunități Open Source din România.

Vara, s-a desfășurat ROSEdu Summer of Code [4], la a doua ediție, program prin care studenții își făceau stagiul de practică în cadrul facultății, dezvoltând proiecte Open Source. Pe lângă proiectele de anul trecut, cum sunt WoUSO și CSPay, Hammerfall  sau VMChecker, au fost și proiecte noi ca EDDS sau Xpresso.

Odată cu începerea semestrului I universitar, a început World of USO [5], competiția online destinată studenților de anul I de la Utilizarea Sistemelor de Operare.

Din octombrie s-a pornit un nou proiect, RTT: ROSEdu Tech Talks [6]. Acesta a constat într-o serie de prezentări tehnice pe teme open source, deschise publicului din facultate.

Tot în octombrie, o parte din membrii ROSEdu au făcut parte din echipa software la ACM, faza pe Europa de SudEst.

Și tot în octombrie a fost cel de-al treilea Ubuntu Install Fest cu ocazia lansării Ubuntu 9.10.

În decembrie, ROSEdu a participat la prima ediție a BLUG*OS*Con [7], cu o prezentare în cadrul conferinței.

Un moment important al istoriei ROSEdu a avut loc anul acesta, când comunitatea a devenit, legal și oficial Asociația ROSEdu.

Din punct de vedere al organizării interne, au fost mai multe proiecte mici. Printre acestea se numără redesign-ul site-ului principal, instalarea unui software de Groupware (pentru organzarea internă) și întocmirea unei mape de prezentare [8]. S-a încercat și publicarea conținului creat de echipă pe “site-uri mai web2.0″ pentru ca mai mulți oameni să aibă acces la aceste resurse… prezentările au fost puse pe Scribd [9] și filmulețele pe Vimeo [10]. Și avem și grup pe Facebook :)

[1] http://rosedu.org

[2] http://cdl.rosedu.org

[3] http://www.eliberatica.ro/2009

[4] http://soc.rosedu.org

[5] http://wouso.rosedu.org

[6] http://talks.rosedu.org

[7] http://blugoscon.blug.ro/

[8] http://www.rosedu.org/mapa-prezentare-ROSEdu

[9] http://www.scribd.com/rosedu

[10] http://vimeo.com/rosedu/

Blug*OS*Con
Saturday, December 05th, 2009 | Author:

Cei de la Bucharest Linux User Group [1] au luna acesta un proiect destul de mare: o conferință open source.

Blug*OS*Con [2] este destinată celor ce folosesc Linux și doresc să afle mai multe despre tehnologiile bazate pe Linux.

Conferința va avea loc în Rectoratul Universității Politehnice București, în sala AN010, pe data de 12 Decembrie 2009. Pentru programul complet, vizitați site-ul oficial.

[1] http://blug.ro/

[2] http://blugoscon.blug.ro/

The World of World of USO
Monday, November 09th, 2009 | Author:

Acum 3 ani câțiva oameni de la ROSEdu [1] au pornit un proiect numit World of USO a.k.a. WoUSO. El era destinat studenților de anul I ce studiau cursul de Utilizarea Sistemelor de Operare de la secția de Calculatoare. Scopul lui era să  introducă un nou mod de a preda o serie de concepte, un mod mai interactiv, mai social și mai distractiv.

WoUSO [2] este, de fapt, un joc multiplayer online. Este accesibil tuturor studenților de la Calculatoare (printr-o legătură cu baza de date de utilizatori a Catedrei). Ei pot intra pe site și pot strânge puncte prin răspunsuri la întrebări tehnice, legate de noțiuni studiate la cursul și laboratoarul de USO. Există o întrebare zilnică (question of the day) standard pentru toată lumea și un quest, cu o serie de întrebări din ce în ce mai grele. Acumulând puncte prin răspunsuri corecte, jucătorii cresc în nivel și în topuri.

Dar elementul cel mai interactiv sunt provocările (challenge-urile). Un student poate provoca alt student la un duel de întrebări și cel ce răspunde la cele mai multe, câștigă puncte.

Proiectul este în al 3-lea său an. Dacă în primul an a fost interesant ca și concept și în al doilea an s-a lucrat mult la calitate, acum, se observă deja o maturiate printr-o atenție la elemente de detaliu în interfață.

WoUSO are acum și o oarecare tradiție și se observă că a ajuns un element  destul de remarcabil pentru semestrul I. Spun asta pentru că în această perioadă toată lumea vorbește despre el. Pe lângă studenții de anul I care sunt principalii beneficiari, sunt și studenții de anul II și III care au jucat versiunile anterioare și le-au găsit interesante și studenți de ani mai mari care nu au apucat perioada WoUSO în anul lor I. Mai multe, mulți asistenți se joacă, pentru că nici ei nu le știu, de multe ori, pe toate :P .

Have fun playing ;)

USO rulz :D

[1] http://rosedu.org

[2] http://wouso.rosedu.org

Academy War Games. ROSEdu Tech Talks
Saturday, October 10th, 2009 | Author:

Astăzi, 10 octombrie, au avut loc două evinimente în facultate. La ora 14 a fost prima prezentare din cadru ROSEdu Tech Talks. Prezentarea a fost ținută de Răzvan Deaconescu, care a prezentat Preprocesorul C. La acestă primă sesiune au participat apoximativ 20 de studenți. Prezentarea este publicată pe pagina proiectului [1] și înregistrarea video urmează să fie încărcată. Următoarea sesiune va avea loc pe 20 octombrie.

În acest timp, echipa Academiei Cisco UPB [2] împreună cu echipa Academiei Microsoft [3] lucrau la amenjarea holului EC pentru Academy War Games [4]. LAN Party-ul a început la ora 18:00 și durează toată noaptea. Mare parte din echipa de organizare a evenimentului vine după două ediții de LAN Strike (oranizate de SRAITS), lucru ce au făcut aceast lan party unul mult mai bine organizat. La eveniment, a venit CEO-ul Microsoft România, Călin Tatomir, ce a stat și a jucat împreună cu studenții.

[1] http://talks.rosedu.org/prezentari

[2] http://ccna.ro

[3] http://itacad.ro

[4] http://awg.cs.pub.ro