[21:13] ok [21:13] wiec [21:13] zaczynamy [21:13] *** Gynvael sets mode: +m [21:13] witam wszystkich ;> [21:13] ----------------------------------czesc 7 ------------------------------------------------- [21:13] jest godzina 21:10 [21:13] i zaczynamy z drobnym opoznieniem [21:13] nasze kolko rozancowe [21:13] eee [21:13] * Gynvael sprawdza w notatkach [21:13] ekhem.. i zaczynamy nasz kurs c [21:13] ;p [21:13] wiec [21:14] co dzisiaj bedzie: [21:14] - 3 slowa o strukturach pakowanych i niepakowanych (to co bylo ostatnio), takie male dopowiedzenie [21:14] - troche wiecej o niejakim enum { } [21:14] - i dla rozluznienia - malloc/free [21:15] ok [21:15] wiec [21:15] najpierw 3 slowa o strukturach pakowanych/niepakowanych [21:15] zrobilem maly tescik przed chwila dla 100000000 odwolan do struktury [21:15] *** __phoenix [^phoenix@ccp67.neoplus.adsl.tpnet.pl] has joined #gynkurs [21:15] typu struct {int,char,int... etc [21:15] tzn odwolan dla kazdego pola ofc ;> [21:16] dla tej struktury spakowanej [21:16] i niespakowanej [21:16] *** __phoenix is now known as phoekurs [21:16] dla spakowanej na moim kompie zajelo to (calosc) 3.1sec [21:16] *** m4shed has quit IRC (Ping timeout) [21:16] natomiast dla niepakowanej 1.6 sec [21:16] stad wniosek, ze to wyrownywanie adresu do 4 jednak czemus sluzy ;> [21:16] i lepiej uzywac niepakowane jesli ma sie wybor ;> [21:16] i zalezy na szybkosci [21:17] ok [21:17] tyle na ten temat [21:17] i zaczynamy pierwszy temat dzisiejszego wieczoru [21:17] *** G0blin is now known as pytanie [21:17] czyli niejaki "typ wyliczeniowy" (jak to w jakies madrej ksiazce wyczytalem) [21:17] ehehe [21:17] ok [21:17] pytania do tego poprzedniego ? [21:17] *** Gynvael sets mode: -m [21:17] mam takie pytanko [21:17] jak zmierzyles tak dokladnie? [21:17] *** pytanie is now known as G0blin [21:18] dokladnie to to nie jest; > [21:18] pamietasz speed.h z ktorego z poprzednich wykladow ? [21:18] ogolnie tego uzywam [21:18] mi sie udalo tylko z dokladnoscia do bez miejsca po przecinku :P [21:18] hehehe [21:18] a z jakich funkcji korzystales ? [21:18] ja bodajze z clock() z time.h [21:19] po prostu pobieralem czas [21:19] ona podaje ilosc cykli zuzytych na proces [21:19] A jakos jt chyba cos takei na linxue time | ./soctam czy jaos tak [21:19] nie pamietam juz czym :P [21:19] yep [21:19] na linie jest time [21:19] time ./program [21:19] ale funkcja zwracala ilosc minionych sekund od '70 pierwszego stycznia [21:19] G0blin: time() uzywales [21:19] G0blin: lepsze jest clock() do tego [21:20] a clock() jak zwraca? [21:20] The clock() function returns an approximation of processor time used by the program. [21:20] znaczy sie z dokladnoscia do 0.1? [21:20] hmm troche wieksza [21:20] z tego co kojarze [21:20] to co zwroci clock [21:20] trzeba podzielic przec CLOCKS_PER_SEC (to stala taka) [21:20] i wtedy dostanie sie sekundy [21:21] CLOCKS_PER_SEC na linie moim to 1000000 [21:21] wiec teoretyczna dokladnosc powinna byc 0.000001 [21:21] ale w to watpie [21:21] sadze ze jakies 0.0001 jest [21:21] ale i tak temu bym nei zawierzal [21:21] najlepiej zrobic taka ilosc operacji (np powtorzen) [21:21] zeby powyzej przecinka czas sie pojawial [21:21] ;> [21:22] :P [21:22] thx ^^ [21:23] ok [21:23] jeszcze jakies pytania ? [21:23] ok [21:23] wiec jedziemy [21:23] *** Gynvael sets mode: +m [21:23] ok [21:23] wiec [21:23] jak zaczalem [21:23] bedzie teraz o trybie wyliczeniowym [21:24] czyli niejakim enum [21:24] "enum" jest 3cim po "struct" i "union" keywordem tworzacym nowy tym [21:25] skladnie ma analogiczna do struct [21:25] i union [21:25] czyli [21:25] enum NAZWA { cos }; [21:25] z tym ze [21:25] ma pare innych uzyc tez [21:25] ale o nich za chwile [21:25] jak dziala enum ? [21:25] tworzy nowy typ taki jak.. [21:25] int ;> [21:25] z tym ze, nazywa poszczegolne jego wartosci [21:25] w incie mielismy 0 1 2 3 [21:26] a w enumie asdf mozemy miec ZERO JEDEN DWA TRZY [21:26] ok [21:26] jak [21:26] na przyklad: [21:26] enum moj_enum { [21:26] ZERO, JEDEN, DWA, TRZY }; [21:26] enum moj_enum ala; [21:26] ala = ZERO; [21:26] ala = JEDEN; [21:26] etc [21:27] mozna rowniez nadawac wyszczegolnione wartosci [21:27] (defaultowo po kolei od 0 nadaje) [21:27] czyli ZERO = 0 [21:27] JEDEN = 1 [21:27] etc [21:27] ale mozemy wymusic [21:27] np [21:27] enum moj_enum { [21:27] ZERO = 0, TRZY = 3, PIEC = 5; } [21:27] moj_enum ala = PIEC; [21:28] co wiecej [21:28] mozna zrobic tak: [21:28] int a = PIEC; [21:28] ;> [21:28] i to tez jest wpelni poprawne [21:28] jak niektorzy wiedza (ci co bawili sie #define wczesniej) [21:28] identyczny efekt mozna uzyskac robiac [21:28] #define ZERO 0 [21:28] #define RAZ 1 [21:28] etc [21:28] jak [21:28] enum { ZERO, RAZ }; [21:29] rzucmy okiem na przyklad: [21:29] http://gynvael.vexillium.org/gk7_1.c [21:29] *** n3tdes is now known as m4sh`pyt [21:29] m4sh`pyt: juz juz, jeszcze chwila [21:29] jak widac w programie sa zastosowane dwa sposoby [21:30] nadawania wartosci jakims nazwa ;> [21:30] po odpaleniu ukazuje sie: [21:30] definy: 0 1 2 [21:30] enumy : 0 1 2 [21:30] czyli efekt koncowy jest identyczny [21:30] *** andi^ [~andi-16@bwc28.neoplus.adsl.tpnet.pl] has joined #gynkurs [21:30] ok [21:30] fajnie [21:30] mozna sobie numerki ponazywac [21:30] etc [21:30] ale po co ? [21:31] do tego by define starczyl [21:31] *** andi^ is now known as dlugotrwakurs [21:31] andi: 17 minut [21:31] ogolnie zalety sa dwie: [21:31] ok [21:31] wiecej jest ;p [21:31] 1) wszystko jest w jednym miejscu [21:31] 2) nie trzeba pisac #define [21:32] *** phoenix__ is now known as phoenix__````` [21:32] 3) przy uzywaniu debuggera i #define wartosc zapisana jako RAZ byla by widoczna jako 1, a przy uzyciu enuma jako RAZ [21:33] 4) mozna stworzy nowy typ (rowny intowi) ktory bedzie przyjmowal tylko wyszczegoolnione wartosci, dzieki temu jesli np wrzucimy zmienna tego typu w switch() [21:33] i zapomnimy o jakims case [21:33] to wtedy kompilator zwroci nam uwage ze ten typ ma np wyszczegolniona jeszcze wartosc "DODAWANIE" i ze pominelismy ja w case [21:33] latwiej sledzic bledy [21:33] ok [21:33] teraz pytania [21:33] za chwile troche przykaldow z enum [21:33] *** Gynvael sets mode: -m [21:33] *** dlugotrwakurs is now known as andi^ [21:33] Czemu te enumy w tym przykldze maj numery 0 1 2 [21:34] To nadje polkli numerki ? [21:34] dlugo trwa kurs? [21:34] adam__i: tak [21:34] gyn jedno ptanie troche nie na temat [21:34] adam__i: tak [21:35] adam__i: jezeli nie wyszczegolnimy mu jaka wartosc ma dac [21:35] to daje po kolei od 1 w gore [21:35] hmm a nie od zera?? [21:35] czemu jczasami jak wklepujeadres to przefladarki to albo wyskakuje zrodlo albo plik do sciagniecia [21:35] *** m4sh`pyt is now known as m4shed [21:35] adam__i: co wiecej [21:35] e [21:35] m4shed: od 1 [21:35] na jednym kursie byl plik a na reszczie zrodlo [21:35] ee [21:35] w8 [21:35] od 0 [21:35] ofc od 0 [21:35] ;] [21:35] phoenix__`````: na vexlium kod a na lunari plik [21:35] bosh.. moje rece pisza cos innego niz maja -- [21:35] aha [21:35] :) [21:36] *** phoenix__````` is now known as phoenix__ [21:36] phoenix__`````: zalezy od serva [21:36] adam__i: co wiecej [21:36] np [21:36] gyn to na vexilium wstaiwaj [21:36] tak mi sie wydawalo ze od zera :) [21:36] enum { CZTERY = 4, PIEC, SZESC }; [21:36] PIEC bedzie mialo kolejna wartosc po ostatniej wyszczegolnionej [21:36] czyli 5 [21:36] a SZESC kolejna po poprzedniej [21:36] czyli 6 [21:36] szesc 6 itd... [21:36] phoenix__: wstawiam tam gdzie mam blizej ehhehe;> [21:36] i tam gdzie dziala -- [21:36] jeszcze jedno [21:37] A aj bedze cos=6,cos2=5,cos3,cos4 ? To cos3 bedze mailo 6 ? [21:37] adam__i: uf [21:37] to dowaliles [21:37] w88 [21:37] http://gynvael.vexillium.org/gk7_2.c [21:37] tam rzuccie okiem [21:37] a ja to sprawdze [21:38] enum { dwa = 2, trzy, piec =5, cos, cztery=4, cosdwa } [21:38] to co bedize mialo trzy cos i cosdwa ? [21:38] trzy bedzie 3 [21:38] gk7_3.c:3: warning: ISO C forbids forward references to `enum' types [21:38] cos bedzie chyba 6 [21:38] dostalem taki warning [21:39] a cosdwa powinno byc 5 [21:39] a wartosci beda [21:39] ale nie wiem [21:39] 6 5 6 7 [21:39] enum [21:39] { cos = 6, cos2 = 5, cos3, cos4 [21:39] }; [21:39] dla adama przypadku [21:39] a moj ? [21:39] trzy 3, cos 6, cosdwa 5 [21:39] czyli moga sie powtarzac ? [21:39] tak [21:39] moga [21:40] enum [21:40] { cos = 4, cos2 = 4, cos3 = 4 [21:40] }; [21:40] bez problemu dziala [21:43] dalej?? [21:43] !time [21:43] -phoekurs- 21:11:48 [21:43] ha [21:43] 31 minut [21:43] ok [21:43] przyklad ze switchem [21:43] http://gynvael.vexillium.org/temp/gk7_3.c [21:44] *** andi^ has quit IRC (Operation timed out) [21:44] ok [21:44] jakies pytania do enum ? [21:44] 404 [21:44] btw to co teraz tlumacze przez ostatnie 7 wykladow to rzeczy czysto skladniowe w sumie ;> [21:44] http://gynvael.vexillium.org/gk7_3.c [21:44] rzeczy bardziej programistyczne beda potem [21:44] ;> [21:45] tzn jak sobie zrobisz tak. enum smieszny{cos=1}; smieszny1 smieszny2; smieszny2 = 1 [21:45] w sumie to za chwile ;> [21:45] czy tak mozna zrobic? czy nie [21:45] tylko moge zrobic smieszny2 = cos; [21:45] m4shed: bez problemu mozna [21:45] kazda zmienna typu enum [21:45] jest traktowana jak int [21:46] aha czyli moge odrazu wartosc podstawiac? [21:46] o jeszcze jedno [21:46] nom k thx [21:46] m4shed: tak [21:46] enum {jeden = 1} [21:46] m4shed: nawet wartosc ktorej nei ma wymienionej [21:46] albo nei tak [21:46] m4shed: np masz zero, jeden, dwa (0,1,2) a ty mozesz dac 1234 [21:46] nie jest to blad [21:46] i nie zostanie nawet warning zgloszony [21:46] czy wystepuja nie zdefiniowane obiekty [21:46] ok kapuje dzieki Gyn [21:46] phoenix__: w enum ? [21:47] phoenix__: takie bez wartosci ? [21:47] tak [21:47] taskie bez warotosci to wiem [21:47] nie [21:47] a ? [21:47] takie co ich nie ma wypisanych [21:47] e-e nie rozumiem o co ci chodzi szczerze mowaic ;> [21:48] jakies typu OSTATNI_ELEMENT or sth ? [21:48] tzn co zworoci kompilator jesli dam enum moj_enum cos cos = cos_czego_nioe_ma_w_enum [21:48] tzn co sie wtedy stanie [21:48] hmm kapuje [21:48] phoenix__: blad [21:48] wyskoczy niezdefiniowane czy poprostu "smiecia" nada [21:48] aha [21:48] phoenix__: on ci powie ze nie wie co to [21:48] ;> [21:48] *** d0b0c0p has quit IRC ("") [21:48] bo myslalem zse np jakaslosowa liczbe [21:49] patrz chodzi mu chyba o to enum moj_enum{costam}; moj_enum moj_enum1; moj_enum = cos1; [21:49] no dobra [21:49] yep [21:49] cos1 napisze ze nie wie co to [21:49] i chodzi ze nie ma tego w enum a ty to tu zglaszasz tak?? [21:49] tak [21:49] nom ;] to git mozemy chyba dalej? [21:49] czy ktos ma pytania? [21:50] a jak bedzie enum cos{} [21:50] to co bedzie [21:50] nic czy blad? [21:50] blad [21:50] "parse error before '}' token" afair [21:50] mam prosbe... [21:50] ma ktos moje gg? [21:51] no tak bo nie ma nic zdefiniowanego wiec wyskoczy blad [21:51] ja mam [21:51] aha, nie mozna korzystac z identycznych nazw w dwoch enumach [21:51] gk7_3.c:14: error: conflicting types for `DODAWANIE' [21:51] gk7_3.c:5: error: previous declaration of `DODAWANIE' [21:51] twoj numer G0blin [21:51] i too [21:51] bo sie cos takiego dostanie [21:51] natomiast mozna zrobic taki numer: [21:51] m4shed: puscisz mi 'sygnal' jak skonczycie o enumie gadac? albo jak skonczycie gadac o podstawach enuma :P [21:51] enum a { A,B,C }; [21:51] enum b { D,E,F }; [21:51] enum a x = D; [21:51] G0blin tak [21:51] i to jest legalne [21:51] G0blin: PIIIIING [21:52] G0blin: wlasnie konczymy hehehe [21:52] ok [21:52] Gynvael: po pingu sie nie kapne [21:52] jeszcze jakies pytanka dot enuma ? [21:52] Gynvael: a zemu ma byc nie legalne ? [21:52] czy lecimmy malloc ? [21:52] Gynvael: wlasnie cos mnie tak udezylo, ze zaczynam coraz mniej wiedziec :P [21:52] phoenix__: heheh ja mowie ze jest ;> [21:52] phoenix__: a moglo by nie byc bo "D" jest od "enum b" a nie "enum a" [21:52] G0blin: ?;> [21:52] aaaa [21:52] heh [21:53] czyli to zwroci wybnik tak jakby enum b x = D ?? [21:53] yep [21:53] ale wtedy jest D=A=1, B=E=2 i C=F=3? [21:53] podstawi za D 0 i tyle [21:53] G0blin: prawie [21:53] a no to -1 do wszystkiego :P [21:53] D=A=0, B=E=1, etc [21:53] tak [21:53] ;> [21:53] dokladnei tak jest [21:53] co sie ze mna dzieje :P [21:53] nie licze od 0 :P [21:53] ok [21:54] jeszcze jakies pytania do enuma ? [21:54] chyba nei [21:54] jak mnie na zielonej szkole obudzili w nocy to ja zaczalem wlasnie cos od 0 liczyc, a teraz... :P [21:54] lol [21:54] ok [21:54] wiec zaczynamy dalej [21:54] *** Gynvael sets mode: +m [21:54] ok [21:55] a teraz krotkie podsumowanie [21:55] z rzeczy skladniowcyh jezka C zostalo juz bardzo niewiele [21:55] mianowicie wskazniki do funkcji ktore beda troszke pozniej [21:55] oraz rozne operacje arytmetyczno algebraiczne [21:55] i slowa kluczowe [21:55] po za tym [21:56] zostal jeszcze preprocesow [21:56] i wstawki asma, ale o nich bedzie duzo pozniej [21:56] narazie powiem tyle [21:56] plan jest taki [21:56] powoli bede wprowadzal elementy poszczegolnych api [21:56] *** phoenix__ is now known as pyt [21:56] takie jak malloc/free o ktorych za chwile [21:56] a tamte rzeczy beda przy okazji [21:56] ok [21:56] jeszcze pytanie pana "pyt" i go ;> [21:56] *** Gynvael sets mode: -m [21:57] co tam ? [21:57] czy bedzie kurs asma albo chociaz male wprowadzenie przy wstawkach ? [21:57] *** pyt is now known as phoenix__ [21:58] phoenix__: Gynvael mowil ze tak [21:58] mowil ale sie pytam... [21:58] bedzie pewnie [21:58] ale to po C [21:58] dopiero [21:58] czyli za jakies 6-7 wykladow [21:58] ale skad mam wiedziec czy napewno giere pisze ... moze zajety jest ' [21:58] eee to spox [21:58] ewentualnie mozna sie umowic [21:58] Gynvael: jeszcze [21:59] ze np w srody bedzie asm [21:59] jedno [21:59] a w poniedzialki C [21:59] albo cos ;> [21:59] zrob pytanie [21:59] pytanie tzn ze bedziesz p[ytal co do czego itd.. [21:59] a na piatki mozemy sie nie ustawiac? :P [21:59] G0blin: hmm w piatki nie zawsze bede [21:59] Gynvael: to dobrze :P [21:59] pon wt sr czwartek [21:59] ?:> [22:00] ehehe [22:00] sob nie [22:00] pon-sr [22:00] ? [22:00] kk [22:00] dobra [22:00] ale to za chwile [22:00] rozmiem ze od do [22:00] powiedzmy tak [22:00] czyi pon wt i sr [22:00] po wykladzie [22:00] jesli ktos zostanie [22:00] Gynvael: [22:00] to pytaj ] [22:00] hm [22:00] albo nie [22:00] ;] [22:00] a moze..... [22:00] to za chwile sie zalatfi [22:00] bo ja mam skleroze ;] [22:00] ok [22:00] dobra [22:00] +m wlaczma [22:00] ;> [22:00] ile kursow planujesz? :P [22:00] dobra ;> [22:00] i na jakim zaawansowaniu sie koncza? [22:00] ~10 [22:00] *** Gynvael sets mode: +m [22:00] ok [22:00] dobra [22:00] wiec [22:01] narazie sprawy organizacyjne [22:01] skoro wynikly [22:01] btw [22:01] wykladow moze byc sporo [22:01] bo o czym mowic to jest [22:01] teraz tak [22:01] Gynvael: moglbys dawac cwiczenia(zad. dom.) [22:01] prosil bym aby osoby ktore sa zainteresowane wykladami asma [22:01] *** G0blin is now known as mam_pomysl [22:01] napisaly cos na priv [22:01] teraz tak [22:01] beda jeszcze 2 wyklady [22:01] a potem chcial bym w jakas sobote albo niedziele [22:02] zrobic calodniowe "warsztaty/cwiczenia" [22:02] zeby kazdy sobie popisal jakies male programiki (pewnie lsite przygotuje) [22:02] i zebym mogl rzucic okiem jak wam idzie [22:02] i ew odpowiedziec na jakies pytanka [22:02] *** mam_pomysl is now known as G0blin [22:02] oo:) [22:02] git [22:03] ok [22:03] 4 osoby mi sie na priva zglosily [22:03] to jest o 2 wiecej niz mnie prosilo o wyklad o C ;p [22:03] wiec pewnie o asmie sie pojawi [22:03] ;> [22:03] A jaki asm bedzie ? [22:03] teraz niech te osoby napisza czy im bardziej sroda czy poniedzialek odpowiada [22:03] godzina 21 ofc [22:03] a [22:03] co do asma [22:03] to moj plan jest taki (ofc mozna sie klucic ze ma byc inaczej ;p) [22:04] - najpierw linux i nasm+ld (czyli intel, 32 bity) [22:04] albo przed tym jeszcze [22:04] - nasm + gcc +ld - funkcje pisane w asmie do C ;> latwiej zakapowac pewne rzeczy ;> [22:04] - po tym natomiast windows i masm (intel, winapi, 32 bity) [22:05] po tym beda eksperymenty czyli: [22:05] - GNU as pod winde/lina (czyli at&t, 32 bity) [22:05] Gynvael: nie za szybko? [22:05] - DOS debug/nasm i tryb graficzny 13h + efekty graficzne (czyli intel, 16 bitow) [22:06] * Blizzard ma kilka uwag:) [22:06] Blizzard: powiem ci tak, przez pierwsze wyklady beda podstawy [22:06] a one wszedzie sa takie same [22:06] i wszedzie obowiazuja [22:06] *** phoenix__ is now known as a_jakis_disasm [22:06] jak sie raz je zalapie [22:06] to potem sie latwo leci [22:06] ehehe [22:06] ok [22:06] wiec do experymentow dopiszcie [22:06] nie nie, akurat tu mi chodzi o samo wykladanie [22:06] *** a_jakis_disasm is now known as phoenix__ [22:06] - reverse engineering ;> [22:07] *** Blizzard sets mode: +o G0blin [22:07] Gynvael: wydaje mi sie [22:07] ze po kazdym wykladzie [22:07] powinno byc z 30 minut zadan dla kazdego [22:07] Gynvael: chyba zaloze zeszyt dodatkowy do infy :] [22:07] zeby mozna bylo temat przecwiczyc [22:07] e dostalem pytanka na priv co to reverse engineering.. w duzym skrocie - disasmowanie programow i ich analiza [22:07] Blizzard: ok, dobry pomyslk [22:07] jak dzisiaj bedziecie mieli 30 minut [22:08] to mozna sie pobawic [22:08] szczegolnie ze o malloc i free to jest 10 minut [22:08] heh ja to i tak zostalem daleko w tyle [22:08] ile z nas sie pojawia tu regularnie? [22:08] i lece wg. symfonii [22:08] zaczynam funkcje;D [22:08] ok [22:08] bo ja mam taki porabany pomysl.... [22:08] teraz chwile na przedyskutowanie [22:08] tego co mowilem [22:08] *** Gynvael sets mode: -m [22:08] G0blin: z 10 osob [22:09] ja jestem regularniwe [22:09] ze moze jak juz troche przyskillujemy bardziej [22:09] to moznaby jakiegos OS'a prymitywnego [22:09] o [22:09] adam__i: ;> [22:09] w ramach cwiczen [22:09] adam__i: moze ty zrobisz potem w ramach experymentow [22:09] adam__i: wyklad o OSach ;> [22:09] chyba ze jakas niepowlana osoba siadzie przy pc [22:09] adam__i: tzn o podstawach pisania ;> [22:09] ja tez regularnie raczej ;] jak pamietam :p nom moze tylko nie dokonca [22:09] mi pasi [22:09] adam__i: troche wiecej OSa napisales niz ja hehehe ;> [22:09] aha [22:09] i ja mam jeszcze taka propozycje [22:09] ja mam pomysl [22:10] zeby to przestal byc gynkurs [22:10] i to bery good [22:10] a zaczal byc nasz-kurs [22:10] :] [22:10] E ja tma malo sei na tym znam [22:10] hehe moze byc [22:10] znaczy coby sie wlaczac [22:10] #gynkurs wymyslil ktos z pierwszych osob [22:10] lol G0blin niee [22:10] gyna to jest kurs [22:10] Ja moge dac dobry link do psiania osow [22:10] ktore mnie prosily o to [22:10] wiec gynkurs [22:10] jak ktos sie zna na temacie to idzie do gyna i mu mowi, ze chce poprowadzic [22:10] adam__i: hmm osdever.net ?; > [22:10] Gyn wyszkolisz z kilka osob tak na bardzo dobrych programistow i zalozymy tim Gyn i spolka i bedziemy giery kodzic [22:10] ;P [22:10] hehehhe [22:10] bueheheh ROTFL [22:10] ja juz team mam ;> [22:11] polski [22:11] wlasnie :] [22:11] adam__i: o ;> [22:11] adam__i: btw ja OS pisalem w C ;> [22:11] Moze nei taki dobry ale polski [22:11] adam__i: w asmie byl tylko bootloader [22:11] btw: ja wole kodzic cos przydatnego, a nie gry :P [22:11] http://www.osprogramming.webpark.pl/kurs.html [22:11] chociarz gry sa gr8 w ramach treningu [22:11] Gynvael: a jak sie tim rozleci ? :> [22:12] phoenix__: nie kombinuj [22:12] G0blin: kase mozna zgarnac ;P [22:12] phoenix__: heheh od 3ch lat jest stabilny ;> wiec nie sadze by sie rozlecial [22:12] ;> [22:12] ok [22:12] teraz tak [22:12] jak sie rozleci, to gyn znajdzie sobie 1M razy lepszy team od nas :P [22:12] faktycznie jezeli ktos ma jakis pomysl na wyklad [22:12] Gynvael: wiem ;] ale my mozemy do niego dolaczyc ;P [22:12] to niech wrzuca w topic albo wpadnie mi na priva [22:12] ja bardzo chetnei poslucham [22:12] ;> [22:13] ok [22:13] hmm [22:13] teraz tak [22:13] faktycznie mozna kanal zmienic [22:13] dobra niewzne z timami jakbedziemy programowac tak jak gyn to mozna mowic o timach ;] [22:13] na jakies #wyklady #kursy albo cos [22:13] ;> [22:13] Gynvael: moze to po kursie :P [22:13] ok [22:13] dobra [22:13] to po kursie [22:13] #1 logi sie przedluzaja [22:13] teraz +m ;> [22:13] obydwa wolne [22:13] i lecimy z malloc/free [22:13] ;> [22:13] #2 jak zmienimy kanal teraz, to polowa logow szlag trafi [22:13] nei teraz [22:13] ;> [22:13] ok [22:14] lecimy dalej [22:14] *** Gynvael sets mode: +m [22:14] tosmy sie rozgadali [22:14] wracamy do tematu [22:14] a potem 30 minut cwiczen i pogadamy sobie jak cos [22:14] ok [22:14] wiec [22:14] dwie BARDZO WAZNE FUNKCJE [22:14] to malloc i free [22:14] z... stdlib.h* [22:14] ta * oznacza ze nei zawsze ;> [22:15] powiedzmy szczerze, czasem trzeba dac jeszcze string.h (np pod winda) zeby zadzialalo [22:15] ;> [22:15] nvm [22:15] zalozmy ze dwa includy sa wazne [22:15] #include [22:15] #include [22:15] * G0blin pytanie [22:15] W8 [22:15] pytania za chwile [22:15] ;p [22:15] ;> [22:15] ok [22:15] wiec [22:15] malloc sluzy do POPROSZENIA SYSTEMU OPERACYJNEGO O SKRAWEK WOLNEJ PAMIECI [22:16] a free do ZWROCENIA SYSTEMOWI TEJZE PAMIECI [22:16] malloc jako argument przyjmuje size_t (to typedef int size_t ;p) [22:16] ktore reprezentuje ilosc bajtow ktora chcemy [22:16] np [22:16] malloc(123) [22:16] to poprosi system o 123 bajty wolnej pamieci [22:17] malloc zwraca void* (wskaznik na pustke, a dokladniej "wskaznik na byleco" ;p) [22:17] a dokladniej wskaznik na PIERWSZY BAJT WYDZIELONEJ PRZEZ SYSTEM DLA NAS PAMIECI [22:17] nastepnie za pomoca free(ten_wskaznik) oddajemy systemowi ta pamiec [22:18] ok [22:18] * G0blin nastepne pytanie [nie karc mnie, ja tylko sygnalizuje ^^] [22:18] malloc jest od "memory allocation" (na privie mnie prosza zeby rozwinac ;>) [22:18] czyli "alokacja pamieci" [22:18] free ofc to z eng "uwolnij" [22:18] przykaldowe uzycie: [22:18] http://gynvael.vexillium.org/gk7_4.c [22:18] buf = malloc(123); [22:19] prosze zwrocic uwage ze tam nie ma rzutowania (char*) [22:19] po prostu nie trzeba, void* jest automagicznie rzutowany na dowolny inny wskaznik przy przypisaniu [22:19] *** Mulander has quit IRC ("") [22:19] (w C++ trzeba ;p) [22:19] (bo C++ jest ble ;p) [22:19] (nvm ;p) [22:19] c++ rox! [22:19] ;p to tak btw.;p [22:19] *** phoenix__ is now known as phoenix__`nie [22:19] ok [22:19] teraz dla C++sowcow [22:20] *** phoenix__`nie is now known as cpp_jest_fajne [22:20] czym sie rozni new od malloc ? [22:20] *** cpp_jest_fajne is now known as phoenix__ [22:20] * G0blin chyba wie ^^ [22:20] new allokuje pamiec i uruchamia konstruktor jesli alokowal pamiec dla obiektu [22:20] a malloc tylko alokuje pamiec [22:20] analogiczna roznica jest z delete/free [22:20] teraz tak [22:21] czasem [22:21] zdarza sie ze po prostu tej pamieci OS nie ma skad wziasc [22:21] wtedy informuje nas o tym zwracajac NULL (przypominam ze to jest (void*)0) [22:21] wiec wypada sprawdzic [22:21] if(buf == NULL) { blad... [22:21] natomiast szczerze mowiac [22:21] przy normalnym uzywaniu [22:22] praktyucznie nigdy sie to nie powinno zdarzyc [22:22] ale ZAWSZE POWINNO BYC SPRAWDZANE CZY SIE NIE ZDARZYLO [22:22] to raz [22:22] (np w warunkach testowych (ulimit sie klania) moze sie to zdarzyc ;p) [22:22] teraz tak [22:22] zalozmy ze program odpali malloc() [22:22] ale zapomni o free [22:23] wtedy powstaje tak zwany memory leak [22:23] czyli wyciek pamieci [22:23] co lepsze systemy operacyjne po zamknieciu programu usuwaja memory leaki [22:23] ale czesc (win9x) nie [22:23] *** phoenix__ is now known as ide_juz [22:23] co niestaty po paru malloc'ach bez free (tzn paru == po zaalokowaniu pamieci == ilosci ramu) [22:23] konczy sie koniecznoscia resetu systemu -- [22:24] *** ide_juz is now known as dajcie_mi_logi_ [22:24] logi beda tam gdzie zawsze jak sadze ;> [22:24] z ciekawostek [22:24] pamieci jest alokowane zazwyczaj kapke wiecej niz tyle ile chcemy [22:24] *** dajcie_mi_logi_ is now known as cya [22:24] (ale pod zadnym pozorem nei mozna z niej korzystac...) [22:24] *** cya has quit IRC ("bye") [22:24] jesli nadpiszemy cos po za pamiecia ktora zaalokowalismy [22:25] konczy sie to zazwyczaj cholernie trudnymi do wysledzenia bugami [22:25] z doswiadczenia wam powiem [22:25] ze jak kiedys serverek WWW pisalem [22:25] * G0blin jeszcze jedno pytanie [22:25] tyo na takiego buga ponad tydzien stracilem [22:25] okazalo ze ze win98 alokuje znacznie wiecej pamieci niz potrzeba [22:25] i tam dzialalo wszystko ok [22:25] ale jak odpalalem swoj serverek na win2k [22:26] to mi sie wieszal ;> [22:26] wkoncu okazalo sie ze mialem zamiast malloc(sizeof(moja_struktura)), uzyte malloc(sizeof(moja_struktura*)) (czyli malloc(4) ;p) [22:26] coz [22:26] dwie ciekawostki jeszcze [22:26] mianowicie pamiec jest alokowana z tak zwanego stogu (heap) [22:27] po dealokacji [22:27] ona tak naprawde nie znika [22:27] free(buf) [22:27] ale zdarza sie ze mozna tej pamieci nadal uzywac [22:27] i nadpisac jakies wazne rzeczy [22:27] to prowadzi do kolejnych trudno wykrywalnych bledow [22:27] moj znajomy z teamu stosuje wtedy swoja funkcje: [22:27] void moje_free(void* pamiec, int wielkosc) [22:28] w ktorej ustawia wszystkie bajty pamieci na 0xCC [22:28] po czym wywoluje free(pamiec) [22:28] dzieki czemu jak sie program wysypie [22:28] i w debugerze zobaczy "0xCCCCCCC" w pamieci tam gdzie sie wysypalo [22:28] to bedzie wiedzial ze szuka proby uzycia uwolnionej pamieci [22:29] drugim ciekawym bledem jest tzw double-free (czasem co lepsi hackerzy z niego korzystaja) [22:29] *** m4shed is now known as m4shaway [22:29] ktory powoduje probe uwolnienia drugi raz tego samego kawalka pamieci [22:29] free(buf); [22:29] free(buf); [22:29] o cos takiego [22:29] *** d3a7h [~d3a7h@bts180.neoplus.adsl.tpnet.pl] has joined #Gynkurs [22:29] normalnei program sie wywali.. ale nie zawsze ;> [22:29] ok [22:29] w sumie tyle ciekawostek [22:29] (jeszcze pare jest, ale o nich kiedys indziej) [22:29] teraz pytanka [22:29] *** Gynvael sets mode: -m [22:30] stdlib.h nie jest dolaczany 'samoistnie' ? [22:30] <@Gynvael> jesli nadpiszemy cos po za pamiecia ktora zaalokowalismy [22:30] 22:25 <@Gynvael> konczy sie to zazwyczaj cholernie trudnymi do wysledzenia [22:30] bugami [22:30] 22:25 <@Gynvael> z doswiadczenia wam powiem [22:30] czy tu mozna zastosowac buffer overflow?? [22:30] G0blin: nie nei jest [22:30] ;> [22:31] m4shaway: to tak zwany heap-based buffer overflow [22:31] aha [22:31] m4shaway: jego sie uzywa troche inaczej, poniewaz po prostu na heapie sa inne dane niz na stacku [22:31] Gynvael: jak z tym alokowaniem wiecej pamieci, nic potrzeba? [22:31] m4shaway: po za tym heap praktycznie nigdy nie jest "wykonywalny" (stack w 90% jeszcze jest) [22:31] w kazdym systemie to inaczej jest rozumiem [22:31] ale jest jakies minimum, ktore zawsze jest? [22:31] G0blin: tzn chodzi o to ze [22:31] np [22:31] i wogle dlaczego wiecej pamieci alokuje? [22:31] buf = malloc(10) [22:31] kapuje dobra ide bo juz usypiam przed kompem bye all jutro zobacze logi. Dzis musialem wczesnie wstac do szkoly [22:32] bye all [22:32] buf[11] pod winnt wykszaczy program [22:32] pa m4shaway [22:32] thx Gyn [22:32] a win98 nawet tego nie poczuje [22:32] *** d3a7h has left #Gynkurs [22:32] tak, mowiles cos o tym..... [22:32] G0blin: chodzi glownie o wyrownywanie do 4/16/64/ile tam chce [22:32] aaaaaaa [22:32] G0blin: ale NIE POLEGAC NA TYM ;> [22:32] right :] [22:32] jak chcesz 10 bajtow, alokuj 10 bajtow [22:32] tylko z ciekawosci pytam :] [22:32] *** m4shaway has quit IRC (EOF From client) [22:32] warto znac jak najwiecej kruczkow [22:33] *** adam_i [~adam@80.48.232.136] has joined #gynkurs [22:33] ok [22:33] jeszcze jakies pytania ? [22:33] ok [22:33] *** Gynvael sets mode: +m [22:33] ok [22:33] teraz tak [22:33] cos jeszcze chcialem, ale nie napisalem, ze mam pytranie i nie wiem czego dotyczylo :P [22:34] w8 [22:34] ;p [22:34] juz wiem [22:34] *** Gynvael sets mode: -m [22:34] ;> [22:34] powiedz wiecej o double free [22:34] bo zanim o tym powiedziales chcialem sie zapytac co by bylo, gdyby 2x tego uzyc :] [22:35] ;> [22:35] w sumie duzo nie powiem ciekawego [22:35] ogolnei system bedzie probowal dwa razy to samo uwolnic [22:35] co sie zazwyczaj konczy segfaultem [22:36] ale jakos podobno mozna to wykorzystac [22:36] do wlasnych celow [22:36] ale jak mozna to wykorzystac jakos 'ciekawiej' ? [22:36] w sumie kiedys o tym czytalem, ale juz nie pamietam [22:36] wiec odsylam do google i +doube-free +bug [22:36] ew +double-free() +exploitation [22:36] etc [22:36] po eng, po pol nic nie bedzie raczej [22:36] na wiki nie ma :P [22:36] no ale ok, jest -m juz sie zamykam [22:37] ;> [22:37] *** Gynvael sets mode: +m [22:37] ok [22:37] wiec lecimy dalej [22:37] juz w sumie nie duzo zostalo [22:37] teraz tak [22:37] malloc jest wolne ;> [22:37] nei ejst super-mega-wolne [22:37] * G0blin pytanie [22:37] ale jest na tyle wolne ze ludzie pisza wlasne biblioteki/funkcje zeby jakos to przyspieszyc [22:37] ... [22:37] mow G0blin [22:37] ;> [22:37] :] [22:37] new szybsze? [22:37] G0blin: to samo [22:38] aha.... [22:38] jeszcze jedno mam :] [22:38] pytaj [22:38] w pascalu sa 3 rodzaje przydzielania pamieci [22:38] w C tez? [22:39] (raczej kontroli pamieci :P) [22:39] tzn? [22:39] jakeis sa w pascalu ? [22:39] jest new i dispose [22:39] i jeszcze 2, zaraz Ci powiem :] [22:39] 2 pary [22:39] w C z funkcji api sa tak: [22:39] malloc - mowilem [22:39] free - mowilem [22:40] GetMem(wska?nik, rozmiar-bloku) [22:40] FreeMem(wska?nik, rozmiar-bloku) [22:40] calloc(ilosc, wielkosc) - to w sumie jest malloc(ilosc*wielkosc) ;p [22:40] mark(wska?nik) [22:40] release(wska?nik) [22:40] z tego co mowisz to: [22:40] new/delete==new/dispose [22:41] realloc(pointer, ilosc) - zmienia rozmiar zaalokowanego bloku (np jesli stwierdzimy ze wiecej potrzeba).. to jest extremalnie wolne ;> (tzn nie super-mega, po prostu wolne ;> na linuxie do przezycia, pod win9x uff...) [22:41] malloc/free==mark/release [22:41] i w sumie tyle [22:41] te 4 [22:41] (pod windowsem w WinAPI jest tego od cholery ;p ale o tym duuuuuzo pozniej) [22:42] ok [22:42] teraz tak [22:42] ok :] [22:42] jako ze G0blin sam sobie odpowiedzial [22:42] to wracam do tego o czym mowilem [22:42] czyli.. [22:42] jako ze to najszybsze nie jest [22:42] i najbardziej bezpieczne tez nie (memory-leaki, nadpisania etc) [22:42] nie powiedziales, ale przyjmuje, ze nie ma, bo jakby bylo, to bys odpowiedzial :] :P [22:42] ale kontynuuj [22:42] to do duzych projektow robi sie memory managery [22:43] sa to biblioteki (zbiory funkcji) [22:43] ktore staraja sie za pomoca sztuczek przyspieszyc alokacje i uwalanianie [22:43] i np pilnowac zeby nie bylo memory leakow [22:43] dokladnie jakich sztuczek uzywaja to wam teraz nie powiem [22:43] tylko wspomne o dwoch: [22:44] - dirty_alloc - alokuje sie np 1mb pamieci, po czym robi wlasnego "mymalloc" ktory z tego 1mb po kolei wydziela troche pamieci [22:44] - block alloc - wiemy ze bedziemy czesto alokowac np po 32 bajty, alokujemy wiec (32+costam)*1000 [22:44] i z tego 1000 wydzielamy te bloki po 32 bajty [22:44] mamy liste uzywanych i nieuzywanych blokow [22:45] dzieki czemu wszystko idzie szybko [22:45] (bo nie wywolujemy malloc ani free) [22:45] to sa dwie najprostsze sztuczki [22:45] jesli chodzi o przyspieszenie [22:45] jesli chodzi o wykrywanie mem leakow [22:45] * G0blin pytanie, ale zadam na koncu :] [22:45] to najprostsza sztuczka brzmi: [22:45] robimy tak: [22:45] int ilosc_alokacji = 0; [22:46] void *my_malloc(int wielkosc) { ilosc_alokacji++; return malloc(wielkosc); } [22:46] void my_free(void* ptr) { ilosc_alokacji--; free(ptr); } [22:46] i na koncu programu sprawdzamy czy liosc_alokacji = 0 [22:46] jesli nie, to sygnal dla nas zeby szukac bledu [22:47] natomiast co bardziej wyrafinowane metody trzymaja liste zaalokowanych itemow [22:47] i umieja wskazac gdzie (w zrodle) byla zaalokowana pamiec ktorej nie uwolniono [22:47] i ile miejsca alokowano [22:47] a takze jaki adres otrzymano [22:47] z tym ze to bylo tak na marginesie [22:47] ok [22:47] teraz pytanka [22:48] a potem mozemy sie pobawic w cwiczenia [22:48] - block alloc - wiemy ze bedziemy czesto alokowac np po 32 bajty, alokujemy wiec (32+costam)*1000 [22:48] *** Gynvael sets mode: -m [22:48] costam==ta nadwycha, co zawsze OS alokuje? [22:48] [22:48] i co mowiles, ze nie polegac na tym nigdy... ? [22:49] Nie sam [22:49] =^^= [22:49] ne [22:49] costam = miejsce potrzebne funkcji obslugujacej zeby pamietala informacje w ktorej liscie jest dany block [22:49] (o listach bedzie potem ;>) [22:49] listy znam :D [22:49] :P [22:50] tyo nice ;> [22:50] ok [22:50] jeszcze jakies pytania [22:50] chyba nie, przynajmniej ja [22:50] aha [22:52] Disconnected from server