[ anatogen @ 17.12.2001. 19:59 ] @
Ima li negde spiska svih sistemskih poziva (za linux) ali opisanih na nacin:
"U %eax stavis to u %ebx stavis to itd. pa u %eax se vraca to... "
[ Vojislav Milunovic @ 17.12.2001. 23:20 ] @
Pa lepo u ebx ide prvi argument funkcije u ecx drugi u edx treci. U eax broj syscall-a i u eax se nalazi povratna vrednost a spisak svih systemskih poziva imas u /usr/include/sys/syscall.h (to je za BSD) a za linux /usr/include/linux/syscall.h ili tako nesto nemam Linux da proverim :) za to koji parametar koristi funkcija kucaj man
[ anatogen @ 17.12.2001. 23:36 ] @
naravno u %eax ide broj sis poziva... pa redom...
sta li mi bi da postavljam glupazko pitanja nije mi jasno... mrtav nesto ovaj forum pa reko' ajd da pitam nesto... kreten...
[ Vojislav Milunovic @ 18.12.2001. 21:06 ] @
Nije forum mrtav, nego nista niko ne pita. Ako mene pitas mrtav forum je onaj Art of exploitation (nadam se da nisam promasio spelling). To je forum koji bi trebalo ukinuti jel niko niti postuje niti ga iko cita :)

Ovaj forum je koristan, eto ti si postavio ovo pitanje ali neko ko nije znao je procitao i sad zna vise o tome. Inace pitanja u ovom forumu dobijaju jako brzo odogovre.
[ anatogen @ 18.12.2001. 22:37 ] @
E, ne treba ukitati Art of exploitation posto cu za par meseci doci dotle pa mozda postujem nesto :)
ja bih otvorio forum linux kernel...
[ Vojislav Milunovic @ 19.12.2001. 17:15 ] @
Ma Art of Exploitation treba ukinuti tu nema nikog, ako imas neko pitanje u vezi bug-a postujes u C ili assembler ili Reverse inzninjerstvo :)
[ anatogen @ 19.12.2001. 22:51 ] @
Ovako na adresi http://www.linux.co.yu/forum/viewtopic.php?t=897 je pitanje na koje je odgovoren ali to vazi znaci za FILE* odnosno strimove koji sami po sebi imaju bafer ali kada ja uradim

movl $1, %ebx
movl $pointer_na_sring_koiji_se_ne_zavrsava_sa_\n, %ecx
movl $duzin_stringa, %edx
movl $4, %eax
int $0x80

ne pojavi se nista na ekranu, e sad to verovtno ima veze sa nekim baferom tty_a ali bih' ja nesto vise o tome pa ako ima neki link ili tako nesto?
hvala...
[ Vojislav Milunovic @ 23.12.2001. 15:51 ] @
Citat:
anatogen:
movl $1, %ebx
movl $pointer_na_sring_koiji_se_ne_zavrsava_sa_\n, %ecx
movl $duzin_stringa, %edx
movl $4, %eax
int $0x80


Nema to veze sa bufferom, ovaj kod je potpuno ispravan :) sigurno ti pointer nije na dobar buffer, inace write() syscall zabole da li je string \n terminiran. Pogledaj ti malo u gdb da li predajes dobru adresu i probaj da implementiras ovaj kod u C vako:

Code:

int main(){
 char *string="siiiiiiineeeeee";
 int len=strlen(string);
 __asm__ volatile(
"movl $0x1, %%ebx \n"
"movl %0,%%ecx \n"
"movl %1,%%edx \n"
"movl $0x4, %%eax \n"
"int $0x80 \n"::"a"(string),"b"(len));
exit(0);
}


Mozda ima neka sintaksna greska ali ovaj kod bi trebalo da radi, ako dobijes neku gresku kod kompajliranja javi pa da vidimo gde sam pogresio :)

[ anatogen @ 23.12.2001. 23:03 ] @
Citat:
Vojislav Milunovic:
Nema to veze sa bufferom, ovaj kod je potpuno ispravan :) sigurno ti pointer nije na dobar buffer, inace write() syscall zabole da li je string \n terminiran.


Naravno da ga zabole to sam znao :) takodje ne bih ni pitao da mi pointer nije na pravi
buffer, write vrati u %eax kolko je karaktera ispisao ali ...nema nista na ekranu...

Ja sam jos pocetnika pa ne mogu da protumacim onaj C kod u svako slovce ali kao sto sam i mislio
posle komapajliranja ...nema nista na ekranu...
[ anatogen @ 23.12.2001. 23:24 ] @
E, onaj tvoj kod nema sintaksne ali izgleda ima semanticke greske... nesto se ne prenose promenljive string i len kako treba odnosno u bafer tty se upise samo "s" koje se naravno ne odstampa dok mu ne dodje jedno "/n" odnekud...

Ne znam nikada nisam ubacivao asm u C :) ali je dobra fora...


[ Vojislav Milunovic @ 24.12.2001. 15:21 ] @
Probaj onda samo write() funkciju da koristis, to bi trebalo isto da bude.
Mada ovaj kod sto sam dao ako se kompajlira trebalo bi da ispise "siiiiineeeee" na ekranu. Uzgred jel ti kompajliras na Linuxu ili na BSD?
[ anatogen @ 25.12.2001. 00:55 ] @
Nema potrebe da na sto nacina radim istu stvar, bez /n na ekranu se nista ne ispisuje i to je cinjenica...
mene je intesresovalo da li neko ima neki tekstic o funkcionisanji tty drajvera odnosno njegove write operacije...

Kada se kompajlira tvoj kod, kao sto rekoh ranije, ne ispise se nista na ekranu i to ne samo sto nema /n na kraju nego sto ne valja pointer na duzinu stringa pa se u bafer upise samo "s" a kada mu ja sa drugim write() posaljem jedno /n onda se odstampa to jedno "s" :)

Citat:
Uzgred jel ti kompajliras na Linuxu ili na BSD?


Linux, baby, Linux!

[ Vojislav Milunovic @ 25.12.2001. 23:07 ] @
Dobro ajde sad ti meni objasni kako meni ovo lepo radi u 80x25 konzoli bez ikakih gresaka. Mislim ovaj kod mora da radi. Ovde se ti nigde ne petljas sa bufferima i tty. Pozivas ANSI write() funkciju preko ASM, tj. radis ono sto ce C kompajler da uradi za tebe.

E sad ako tebi ne radi, ja pojma nemam sto ne radi. Nema veze da li ti na kraju imas \n ili ne. write() funkcija pise buffer odredjene duzine na file descriptor i nista vise tu f-ju ne zanima.
[ Vojislav Milunovic @ 25.12.2001. 23:14 ] @
Dobro ajde sad ti meni objasni kako meni ovo lepo radi u 80x25 konzoli bez ikakih gresaka. Mislim ovaj kod mora da radi. Ovde se ti nigde ne petljas sa bufferima i tty. Pozivas ANSI write() funkciju preko ASM, tj. radis ono sto ce C kompajler da uradi za tebe
Code:

int main(){
 printf("siiiiiiineeeee");
}


E sad ako tebi ne radi, ja pojma nemam sto ne radi. Malo gdb u ruke. Nema veze da li ti na kraju imas \n ili ne. write() funkcija pise buffer odredjene duzine na file descriptor i nista vise tu f-ju ne zanima.
[ anatogen @ 26.12.2001. 13:30 ] @
Citat:
E sad ako tebi ne radi, ja pojma nemam sto ne radi. Malo gdb u ruke. Nema veze da li ti na kraju imas \n ili ne. write() funkcija pise buffer odredjene duzine na file descriptor i nista vise tu f-ju ne zanima.


Kako bre gdb u ruke... sta da debagujem, kernel ? :)

Ok, mozda se nismo razumeli, meni radi write() itd.

Ja sam beginner i u slobodno vreme malo citkam o linuxu ali valjda ide ovako: ja pozovem write sys poziv softverskim prekidom, kernel vidi koji je broj sys poziva i kaze aha 4 znaci pise nesto u fajl pa onda vidi koji sam mu fd poslao u %ebx, posto je na 1 nasledio /dev/tty1 od procesa koji ga je pozvao onda on trazi in-core (ili VFS) inode tog fajla pa kad vidi da je to chardev tip fajla onda mu gleda major, 4 u ovom slucaju, koji sluzi kao index u tablelu chadevs drajvera. Onda vidi minor koji je 1 i dodje do strukture koja opisijuje tty1.
E u toj strukturi izmedju ostalog nalazi se pointer na file operations za taj fajl i naravno jedna od njih je write... e to write mene interesuje !

To write verovatno ima neki svoj bafer koji dok ne primi /n nece ni da salje na graficku kariticu sto je u stvari i logicno...





[ Vojislav Milunovic @ 26.12.2001. 19:57 ] @
ok uradi samo ovo :

Code:

int main(){
 write(1,"voja",4);
}


Ako ti ovo ne radi onda ja stvarno nemam predsatvu sta je problem.
Ako ti ovo gore ne radi onda ni ovo ne bi trebalo da ti radi :

Code:

int main(){
 printf("voja");
}


uzmi u ruke gdb i pogledaj gde gresis a ne da se zalis na kernel koji mora preko write() da pise na ekran. Druge funkcije za to nema.
[ anatogen @ 27.12.2001. 00:31 ] @
Ajd jos jednom da ti porucim da ona dva koda ne stampaju nista na mom ekranu a kada bi neko jos pratio ovaj thread osim mene i tebe mogao bi da proba pa da javi sta se desilo...

Anyway, cenim to, mislim super moderator i sto odgovaras na pitanja ali jebes mi sve ako si ti procitao moju poslednju poruku ! Mislim mozda si je ti bolje procitao nego sto sam je ja napisao pa mozes, tako izmedju ostalog, da mi preciziras gde se zalim na kernel itd.






[ Vojislav Milunovic @ 28.12.2001. 14:44 ] @
Pa jesi sam reko da pratis minor i major broj cahrdev-a do funkcije :) to je kernel.

Inace ova dva koda bi trebalo da rade, ako ne rade, ja stvarno ne znam sta nije uredu. Probaj da posle
printf("voja");
pozoves fflush(stdout); funkciju. (moras da #include<stdio.h>)
[ anatogen @ 29.12.2001. 01:43 ] @
Da, ali se ja ne zalim na kernel vec polusavam da shvatim kako radi, a ovakve sitnice me malo nerviraju.... :)

Inace ne mogu da verujem da niko da uleti u diskusiju?! Ajd' bar neko sa nekim linuxom nek napravi datoteku sa sledecim sadrzajem:

.section .data

pera:
.ascii "pera"
pera_end:
.equ pera_len, pera_end - pera

.section .text
.globl _start
_start:

movl $1, %ebx
movl $pera, %ecx
movl $pera_len, %edx
movl $4, %eax
int $0x80

movl $0, %ebx
movl $1, %eax
int $0x80

i neka je nazove recimo: "pera.s".
Zatim, neka otkuca: "as pera.s -o pera.o" pa "ld pera.o -o pera" i na kraju "./pera"
i ako se posle toga odstampa ili ne odstampa rec "pera" nek javne ovde cisto iz zezanja...