!c99Shell v. 1.0 pre-release build #16!

Software: Apache/2.2.3 (CentOS). PHP/5.1.6 

uname -a: Linux mx-ll-110-164-51-230.static.3bb.co.th 2.6.18-194.el5PAE #1 SMP Fri Apr 2 15:37:44
EDT 2010 i686
 

uid=48(apache) gid=48(apache) groups=48(apache) 

Safe-mode: OFF (not secure)

/usr/share/gimp/2.0/help/cs/   drwxr-xr-x
Free 50.91 GB of 127.8 GB (39.83%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     ch07s02s02.html (13.29 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
2.2. Proměnné a funkce

2.2. Proměnné a funkce

Nyní, když víte, že každý výrok ve Scheme je uzavřen v kulatých závorkách a že jméno funkce či operátor je v závorkách uveden na prvním místě, je třeba se naučit a vytvářet proměnné a funkce. Začneme proměnnými.

2.2.1. Deklarace proměnných

I když existuje více způsobů, jak proměnné vytvářet, je preferována metoda pomocí konstrukce let*. Pokud znáte jiné programovací jazyky, je tato metoda ekvivalentní definici seznamu lokálních proměnných a rozsahu jejich platnosti. Jako příklad deklarujeme dvě proměnné, a a b, inicializované na hodnoty 1 a 2:

         (let*  (
                   (a 1)
                   (b 2)
                )
                (+ a b)
         )
      

nebo na jedné řádce:

        (let* ( (a 1) (b 2) ) (+ a b) )
      
[Poznámka] Poznámka

Používáte-li Script-Fu konzoli, je třeba zadat vše na jednom řádku. V ostatních případech je však dobré používat přehledné odsazování pro zvýšeni čitelnosti kódu. Více si o tom povíme v části věnované bílým znakům.

Takto jsou deklarovány dvě lokální proměnné, a a b, inicializovány a je vypsán jejich součet.

2.2.2. Co je lokální proměnná?

Jistě jste si všimli, že součet (+ a b) byl zapsán uvnitř závorek výrazu let*, nikoliv za nimi.

Je to tak, protože výrok let* definuje oblast skriptu, ve které jsou deklarované proměnné použitelné. Pokud by byl výraz (+ a b) až za výrazem (let* ...), vznikla by chyba, protože deklarované proměnné jsou platné pouze uvnitř výroku let*; jedná se o tzv. lokální proměnné.

2.2.3. Obecná syntaxe let*

Zápis výroku let* je obecně následující:

        (let* ( proměnné ) výrazy )
      

Proměnné jsou deklarovány v závorkách, např. (a 2), a výrazy jsou jakékoliv platné Scheme výrazy. Nezapomeňte, že takto deklarované proměnné jsou platné pouze uvnitř výroku let* – jsou to lokální proměnné.

2.2.4. Bílé znaky

Již dříve jsme poznamenali, že je dobré kód skriptů zpřehlednit použitím odsazování. Skutečně se to vyplatí. Ve Scheme není s odsazováním žádný problém; protože interpretr bílé znaky (tj. mezery, tabulátory, nové řádky a podobné) zcela ignoruje, je proto možné je pro formátování a zpřehlednění skriptu libovolně používat. Ve Script-Fu konzoli ale musíte psát vždy celý výraz na jeden řádek; vše mezi otevírací a uzavírací závorkou výrazu musí být ve Script-Fu konzoli na jednom řádku.

2.2.5. Přiřazení nové hodnoty proměnné

Často je třeba změnit hodnotu již inicializované proměnné. Ke změně hodnoty proměnné se používá výrok set!:

        (let* ( (theNum 10) ) (set! theNum (+ theNum \
        theNum)) )
      

Pokuste se odhadnout, co výše uvedený výrok dělá, a pak ho zadejte do Script-Fu konzole.

[Poznámka] Poznámka

Znak \ značí pouze, že na jeho místě není konec řádky. Nezadávejte ho do konzoly, netiskněte na jeho místě Enter, prostě pokračujte další řádkou.

2.2.6. Funkce

Nyní, když umíte pracovat s proměnnými, se podíváme na funkce. K deklaraci funkce slouží následující syntaxe:

        (define (jmeno
        seznam-parametru)
        vyrazy)
      

kde jmeno je jméno funkce, seznam-parametru je mezerami oddělený seznam jmen parametrů funkce a vyrazy je řada výrazů, které funkce při svém zavolání vykoná. Například:

        (define (AddXY inX inY) (+ inX inY) )
      

Tato funkce se jmenuje AddXY a má dva parametry, proměnné inX a inY. Funkce oba své parametry sečte.

Pokud jste programovali v jiných imperativních jazycích (např. v C/C++, Javě, Pascalu atd.), možná jste si všimli, že definice funkce neobsahuje ve srovnání s jinými jazyky řadu položek.

  • Parametry nemají žádné typy (nejsou deklarované jako řetězce, celá čísla apod.). Scheme je jazyk bez typové kontroly. To je velmi praktické a usnadňuje rychlé psaní skriptů.

  • Navíc se také ve Scheme nemusíme zabývat vracením výsledku funkce, vrácenou hodnotou při zavolání funkce je poslední výrok. Zadejte výše uvedenou funkci do Script-Fu konzole a pak zkuste následující:

                (AddXY (AddXY 5 6) 4)
              

:: Command execute ::

Enter:
 
Select:
 

:: Shadow's tricks :D ::

Useful Commands
 
Warning. Kernel may be alerted using higher levels
Kernel Info:

:: Preddy's tricks :D ::

Php Safe-Mode Bypass (Read Files)

File:

eg: /etc/passwd

Php Safe-Mode Bypass (List Directories):

Dir:

eg: /etc/

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c999shell v. 1.0 pre-release build #16 Modded by Shadow & Preddy | RootShell Security Group | r57 c99 shell | Generation time: 0.0064 ]--