🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: jak zaczac ?

#384
From: Bogdan (bogdro)
Date: Mon, 10 Jul 2006 17:42
98 lines
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-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> <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