«« ( Date ) »» // «« ( Thread ) »» // ir3sp - 2011

pozivanje funkcija

by Branislav Petrović 05/0408
petak, 05. avgust 2011 - 05:40.

Da li mozete da mi pomognete, pokusavam da pronadjem kakvo je pravilo za stavljanje na stek prilikom poziva funkcija definisanih u C-u. Uradio sam disassemble programa i primetio da se na pocetku svake funkcije izvrsi push uglavnom registara r11 i r14, ali vidim da je negde i r4, r5, a mozda i jos neki.

Jasno mi je za r14, to je lr registar, koliko sam razumeo r11 je kao bp registar i ova 2 registra se uvek stavljaju na stek, ali ne znam kad se stavljaju r4, r5 i ostali registri.

Konkretno za funkciju int CreateAndStart(void (*f)(), int timeSlice); na stek se stavljaju r4, r11 i lr registri. Ova funkcija ima samo 2 argumenta od toga jedan je int sto je 4B, a drugi adresa funkcije koji je valjda takodje 4B, tako da pretpostavljam da se oni bez prekoracenja prosledjuju preko r0-r3 registara.