Article View: pl.comp.lang.asm
Article #384Re: jak zaczac ?
From: Bogdan (bogdro)
Date: Mon, 10 Jul 2006 17:42
Date: Mon, 10 Jul 2006 17:42
98 lines
5682 bytes
5682 bytes
Stachu 'Dozzie' K. napisał(a): > On 10.07.2006, Bogdan (bogdro) <bogdan@bogdan.pl> wrote: >> Stachu 'Dozzie' K. napisał(a): >>> A szkoda, bo brakuje mi choćby wyjaśnień, jak jest ułożona pamięć pod >>> takim Linuksem podczas pracy programu, >> Oj, od dość dawna jest (a przynajmniej schemat): >> http://rudy.mif.pg.gda.pl/~bogdro/linux/linux02.html, nagłówek: >> "Organizacja pamięci w Linuksie". > > Brakuje mi opisu, gdzie są rozmieszczone zmienne lokalne, zmienne > statyczne i globalne (C), jak się wyrównuje rejestr ESP przy wchodzeniu > do funkcji (skompilowany kod C) i co to jest wskaźnik ramki. Pewnie coś > jeszcze, ale na chwilę obecną nie pamiętam. Rozsądne zagadnienia. Raczej znajdą się w kursie, w różnych miejscach części 2. > [..] >> Co więcej chciałbyś zobaczyć? (pytanie na serio, nie ironiczne!) > > Tak więc odpowiadam akapit wyżej. > > A nawet gdyby pytanie było ironiczne, otrzymałbyś taką samą odpowiedź ;) To dobrze :) Wolałem się zabezpieczyć przed odebraniem pytania jako złośliwe. > Zdaję sobie z tego spawę. > Z uwag dodatkowych: > - brakuje mi opisu, jak łączyć C i assemblera, gdy to assembler jest > głównym językiem (sytuacja odwrotna do wstawek). To już zahacza > o entry points (main i _start), tablicę symboli w kompilatorze > (u mnie: GCC), format ELF, biblioteki statyczne i współdzielone > i o loader ELF-ów Łączenie C z asmem jest takie samo, jak asma z C: nasm -f elf czesc1.asm # zawiera main() gcc -o calosc czesc1.o czesc2.c czesc3.c Ale jakiś drobny przykładzik dorobię. W kursie przeznaczonym dla początkujących wolałbym nie wnikać w szczegóły formatu ELF i inne skomplikowane sprawy. Za to oba rodzaje bibliotek są omówione w jednym z mini-kursów. > - przydałaby się gdzieś informacja, jak upychane są argumenty syscalli, > gdy jest ich więcej niż trzy Istotnie, w samym kursie brak tego. Ale w opisie przerwania int 80h są podawane odpowiednie rejestry (więc znajomość kolejności jest już niepotrzebna?), a przy najbardziej rozbudowanych syscallach widać wszystko wyraźnie (np. sys_mmap() - 6 rejestrów, więcej nie ma żadna). Chyba też to dorobię. > - funkcje w języku C mogą zwracać wartości o większym rozmiarze niż 32 > bity; taka informacja może być pouczająca, gdy się pokaże, co się > dzieje z danymi o rozmiarze QWORD (EAX + EDX, nie pamiętam w jakiej > kolejności) i z dłuższymi Dorobię, nie ma tego za dużo. Tylko muszę się przyjrzeć, jak są zwracane struktury. Strzelam, że przez wskaźnik, bo niby jak inaczej? > - język C zakłada[*], że niektóre rejestry pozostaną niezmienione po > wywołaniu funkcji, a niektóre mogą się zmieniac swobodnie; > wspomnienie, które rejestry są które może być przydatne Zrobię, ale na odwrót. Nie będę mówił, że język C wymaga zachowania tylko jakichś tam rejestrów, bo zaraz mi "uczniowie" zaczną pisać procedury nie zachowujące modyfikowanych rejestrów (z przyzwyczajenia nawet tam, gdzie nie używają C). W kursie powiem za to, które rejestry mogą zostać zmienione przez funkcje biblioteki C i że "należy się wystrzegać polegania na ich zawartości". Treść dokładnie ta sama, ale o wiele lepiej dydaktycznie to brzmi :) > Można też pokusić się o programowanie sieciowe, ale linuksowy syscall > jakoś niespecjalnie mi odpowiada, a użycie funkcji z glibc koncepcyjnie > już nie różni się od normalnego programu w C. Do linuksowego syscalla (sys_socketcall) to nawet nigdzie nie mogłem wyszukać dokumentacji, a serwer i klient w asm w oparciu o glibc już są dawno gotowe w jednym z mini-kursów. > [*] To oczywiście uproszczenie, bo chodzi o konwencję wołania funkcji > używaną w plikach ELF na architekturze x86. x86 - tak, ale nie tylko ELF. Tak samo jest w Windows, w DOSowym C pewnie też. No i kolejne 4 rzeczy "do zrobienia". Na razie przyhamujmy. Zrób sobie listę, a jak uporam się z pracami bieżącymi, to znów sypniesz tematami :) -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Technical Details
Message-ID:
<e8u3jd$ak8$1@atlantis.news.tpi.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<e8ifjo$o1i$1@atlantis.news.tpi.pl> <1152193946.886142.257150@75g2000cwc.googlegroups.com> <e8lm1p$dnv$1@inews.gazeta.pl> <e8nogd$cgm$2@atlantis.news.tpi.pl> <e8rd6g$ltc$1@nemesis.news.tpi.pl> <1152466310.474238.58090@35g2000cwc.googlegroups.com> <slrneb2iab.56h.dozzie@hans.zsh.bash.org.pl> <e8tjfq$6as$1@nemesis.news.tpi.pl> <slrneb505j.oqh.dozzie@hans.zsh.bash.org.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.nask.pl!news.nask.org.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail From: "Bogdan (bogdro)" <bogdan@bogdan.pl> Newsgroups: pl.comp.lang.asm Subject: Re: jak zaczac ? Date: Mon, 10 Jul 2006 19:42:40 +0200 Organization: tp.internet - http://www.tpi.pl/ Lines: 98 Message-ID: <e8u3jd$ak8$1@atlantis.news.tpi.pl> References: <e8ifjo$o1i$1@atlantis.news.tpi.pl> <1152193946.886142.257150@75g2000cwc.googlegroups.com> <e8lm1p$dnv$1@inews.gazeta.pl> <e8nogd$cgm$2@atlantis.news.tpi.pl> <e8rd6g$ltc$1@nemesis.news.tpi.pl> <1152466310.474238.58090@35g2000cwc.googlegroups.com> <slrneb2iab.56h.dozzie@hans.zsh.bash.org.pl> <e8tjfq$6as$1@nemesis.news.tpi.pl> <slrneb505j.oqh.dozzie@hans.zsh.bash.org.pl> NNTP-Posting-Host: acrd103.neoplus.adsl.tpnet.pl Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1152553389 10888 83.11.5.103 (10 Jul 2006 17:43:09 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Mon, 10 Jul 2006 17:43:09 +0000 (UTC) User-Agent: Thunderbird 1.5.0.4 (X11/20060516) In-Reply-To: <slrneb505j.oqh.dozzie@hans.zsh.bash.org.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit