🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #383

Re: jak zaczac ?

#383
From: Stachu 'Dozzie' K.
Date: Mon, 10 Jul 2006 16:20
105 lines
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-mail
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>

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