Article View: pl.comp.lang.asm
Article #383Re: jak zaczac ?
From: Stachu 'Dozzie' K.
Date: Mon, 10 Jul 2006 16:20
Date: Mon, 10 Jul 2006 16:20
105 lines
5500 bytes
5500 bytes
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. [..] > 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ź ;) >> jak z assemblera wołać funkcje >> z libc (w tym co to jest main i _start), > > Fakt, w głównym kursie tego rzeczywiście nie ma. Za to jest w > niektórych mini-kursach (programy sieciowe, programy rezydentne). Może > rzeczywiście powinienem dołożyć do kursu. > >> jak przydzielać pamięć dla >> zmiennych lokalnych, > > Nie ma osobnego rozdziału o procedurach/podprogramach, więc tego też > nie ma. W zasadzie takie "przydzielanie" sprowadza się do > > sub esp, liczba_bajtow > > i operowaniu na [esp+xx] lub [ebp-xx]. O tym na pewno wspomnę. Warto, bo przez naprawdę spory kawałek czasu zastanawiałem się, gdzie zapisywać lokalne inty. Dopiero dezasemblacja programiku pisanego w C wyjaśniła, jak to robić. >> i parę >> innych takich. > > Proszę o podanie konkretów. Kurs jest mój, ale nie pisałem go dla > siebie (bo i po co?), Pokazać "jaki to ja mądry, bo znam się na temacie i umiem dobrze wytłumaczyć". Ja z tego powodu piszę howtos (http://xslack.zsh.bash.org.pl/?page=howtos, http://www.debianusers.pl/article.php?aid=66). W moim przypadku jest to bardzo dobra motywacja. > tylko dla innych. Ale nie mogę wiedzieć, czego > innym osobom w nim brakuje. > Swój kurs pisałem w taki sposób, aby omówić wszystko, do czego ja sam > miałem wątpliwości, ucząc się asma. Mówiąc mi, czego Twoim zdaniem > brakuje, pomożesz kolejnym osobom, które w przyszłości będą czytały > mój kurs. 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 - przydałaby się gdzieś informacja, jak upychane są argumenty syscalli, gdy jest ich więcej niż trzy - 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 - 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 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. [*] To oczywiście uproszczenie, bo chodzi o konwencję wołania funkcji używaną w plikach ELF na architekturze x86. >> Jak widać, to nie plus dla strony, że jest najlepsza, >> tylko minus dla wszystkich pozostałych, że brak współczesnych podstaw. >> >> Wiem, że to kubeł zimnej wody, ale już mi obmierzły bezkrytyczne ochy >> i achy nad stroną Bogdana. > > Lepszy taki kubeł konkretów niż po prostu "Bogdan, twoja strona jest > do d***". Cieszę się, że zwracasz uwagę i podajesz *konkretne* tematy. Cieszę się, że doceniasz kubełek konkretów mimo niezjadliwej formy. Wiem, jak się czyta takie uwagi, dlatego cieszę się szczególnie mocno :D > Nie mogę obiecać, że wkrótce się tym zajmę, ale na pewno wezmę Twoje > słowa pod uwagę. Już sobie dopisałem te 3 rzeczy do "pliku rzeczy do > zrobienia". :) -- Szukasz dobrego shella? mail | http://marcinhlybin.com/shell/ Stanislaw Klekot
Technical Details
Message-ID:
<slrneb505j.oqh.dozzie@hans.zsh.bash.org.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!newsfeed.pionier.net.pl!news.dialog.net.pl!not-for-mail From: "Stachu 'Dozzie' K." <dozzie@dynamit.im.pwr.wroc.pl.nospam> Newsgroups: pl.comp.lang.asm Subject: Re: jak zaczac ? Date: Mon, 10 Jul 2006 16:20:39 +0000 (UTC) Organization: Dialog Net Lines: 105 Message-ID: <slrneb505j.oqh.dozzie@hans.zsh.bash.org.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> NNTP-Posting-Host: xdsl-2827.wroclaw.dialog.net.pl Mime-Version: 1.0 X-Trace: news.dialog.net.pl 1152548439 28435 81.168.251.11 (10 Jul 2006 16:20:39 GMT) X-Complaints-To: abuse@dialog.net.pl NNTP-Posting-Date: Mon, 10 Jul 2006 16:20:39 +0000 (UTC) User-Agent: slrn/0.9.8.1 (Linux) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit