A szokatlan nyelvhasználat és

Bent a Linux kernel egy többféle megoldást igénylő egy csomó dolgot olvasni és tanulmányozni, hogy megértsék a használat és a célt. Ez a fejezet a neko-torye pontatlansága vagy pontatlanság használatát, különös tekintettel a beérkezett C-megegyezés-Niyah használt Linux 2.6 kernel.

A szokatlan nyelvhasználat C

asmlinkage mondja a fordító át úgy paraméterek, a helyi verem. Ez a con-társított makro FASTCALL, amely megmondja a fordító (HAL), hogy át paramétereket az általános célú regiszterek. Itt van egy makró include / asm / kötés, a következőkkel:

4 #define asmlinkage CPP_ASMLINKAGE _ attribute_ ((regparm (O)))

5 #define FASTCALL (x) x_ attribute_ ((regparm (3)))

6 #define fastcall _ attribute_ ((regparm (3)))

A következő példa azt asmlinkage.

asmlinkage hosszú sys_gettimeofday (struct timeval _________ felhasználó * tv, struct

időzónát ___ felhasználó * tz)

UL gyakran egészül ki a végén a numerikus állandók, jelezve «unsigned long». UL (vagy L hosszú) kell beilleszteni, hogy a fordító, hogy olvassa el az értéket típusú, hosszú 1. Egyes architektúrák, így lehetséges, hogy nyomja-kunyhó túlfolyó, és túl a határt típusát. Például, egy 16-bites egész lehetnek elő-stavlyat számok közötti -32768 és 32.767; lehet előjel nélküli egész szám 0-tól 65535 Amikor a UL írsz architektúra-független kódot hosszú számokat vagy hosszú bit maszkokat.

Íme néhány példa mutatja a mag:

18 idefine GOLDEN_RATIO_PRIME 0x9e37000lUL

23 #define ULONG_MAX (-OUL)

39 #define SLAB_POISON 0x00000800UL / * mérgező tárgyakat * /

1. Nyilvánvaló, arra utal, hogy unsigned long. Megjegyzés. tudományos. Ed.

2. fejezet • Kutatási eszközök

Soros kulcsszó optimalizálása érdekében szükség van a feladatok teljesítéséhez, az integrál-riruya kód ezeket a funkciókat a hívó kódot. A Linux kernel használ különböző inline funkciók deklarált statikus; «Static tNpe” funkció révén a fordító, hogy megpróbálja végrehajtani a funkció kódot minden rétege a kód okozza, és ha ezt a lehetőséget, de ne a kódban a funkciót. Előfordul, hogy a fordító nem nélkülözheti assembly kódot (abban az esetben, rekurzió), de a legtöbb esetben a funkciók Ob-jelenségeket statikus beépített, teljes mértékben végre a hívó kód.

E bevezetés célja, hogy megszüntesse az összes felesleges műveletek során végrehajtott funkció hívás. # Az expressziós is lehetővé teszi, hogy távolítsa el a hívással kapcsolatos funkciók és műveletek általában használt hordozhatóság biztosítása más com-pilyatory és beágyazott rendszerek.

Akkor miért nem teszi a beépített függvény? A hátránya az integráció, hogy növelje a bináris kód, és néha lelassítja a hozzáférést a cache a processzor.

Ez a két kulcsszavak figyelmen kívül hagyják a sok kezdő programozók. Key begerjedhet szó const nem úgy kell érteni, mint egy állandó, hanem csak olvasható. Például, const int lehet - egy mutató a const-darab. Ebben az esetben a mutató lehet változtatni, és egy egész - nem. Másrészt, int const * JC jelöli const-mutató egy egész, amikor a számot meg lehet változtatni, és a mutatót - nincs. Itt egy példa segítségével const:

62 8 statikus beépített void előzetes letöltési (const void * x)

630 __ asm____ volatile_ ( "tartozás 0% 0" "r" (x).);

Kulcsszó illékony (ideiglenes) olyan változó, amely nem lehet megváltoztatni, a megjegyzések nélkül; illékony mondja a fordítónak, hogy azt kell újratölteni a jelölt változó minden alkalommal fordul elő, és nem tartósított-nyat és hozzáférést biztosít a másolatot. Egy jó példa a változó, amely szükséged van-tag, ideiglenes változók kapcsolódó megszakítások hardver regiszterek vagy változók által megosztott konkurens folyamatokat. Itt egy példa segítségével illékony:

include / linux / spinlock.h 51 typedef struct

Egy rövid áttekintést az eszközöket a tanulmány a nucleus

illékony unsigned int zár; 58> spinlock_t;

Tekintettel arra, hogy const kell kezelni, csak olvasható, azt látjuk, hogy a nem-változók egyaránt lehet const vagy illékony (pl változik Nye, tárolása tartalmát rendszeresen frissített hardver nyilvántartás csak olvasási hozzáférés).

Ez a rövid áttekintés lehetővé teszi a kezdő Linux kernel hackerek magabiztosabban a tanulmány a kernel forrást.

Egy rövid áttekintést az eszközöket a tanulmány a nucleus

Magic: 7f 45 4c 01 01 01 46 00 00 00 00 00 00 00 00 00

Adatok: 2-es komplemens, little endian

Változat: 1 (jelenlegi)

OS / ABI: UNIX - System V

Típus: EXEC (végrehajtható fájlt)

Gép: Intel 80386

Belépési pont címe: 0x8048310

Kezdet program fejlécek: 52 (bájt fájlba)

Kezdet szakaszfejlécekre: 10596 (bájt fájlba)

Mérete fejléc: 52 (bájt)

2. fejezet • Kutatási eszközök

Méret program fejlécek: 32 (bájt)

Száma programot fejlécek: 6

Mérete szakaszfejlécekre: 40 (bájt)

Száma szakaszfejlécekre: 29

Szakaszfejléc szöveg tábla index: február 6

De billenő program címe nyert readelf zászló 1:

Elf fájltípus EXEC (végrehajtható fájlt)

Belépési pont 0x8048310

Jelenleg 6 programot fejlécek, kezdve offset 52

Program fejlécek: Típus Offset VirtAddr PhysAddr FileSiz MemSiz ábra Align PhDr 0x000034 0x08048034 0x08048034 0x000c0 0x000c0 R E 0x4

Interp 0x0000f4 0x080480f4 0x080480f4 0x00013 0x00013 R 0x1 [megkereső programot értelmező: /lib/ld-linux.so.2]

LOAD 0x000000 0x08048000 0x08048000 0x00498 0x00498 R E 0x1000

LOAD 0x000498 0x08049498 0x08049498 0x00108 0x00120 RW 0x1000

DINAMIKUS 0x0004ac 0x080494ac 0x080494ac 0x000c8 0x000c8 RW 0x4

Megjegyzés 0x000108 0x08048108 0x08048108 0x00020 0x00020 R 0x4 szakasznak

2 .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r rel.dyn .rel.plt .init .pit .text .fini .rodata

3 .data .eh_frame .dynamic .ctors .dtors .got .bss

hexdump parancs megjeleníti a fájl tartalmát hexadecimális, ASCII vagy oktális. [Megjegyzés: a régebbi verziók a Linux is használják od (oktális billenő). Most, a legtöbb rendszer használata helyett hexdump.]

Például, hogy lássa az első 64 bites a.out ELF-fájlt hex-terichnom módban van, tárcsázza a következő:

LWP> hexdump -x -n 64 a.out

F 151c 0101 0001 0000 0000 0000 0000

0000010 0002 0003 0001 0000 8310 0804 0034 0000

0000020 2964 0000 0000 0000 0034 0020 0006 0028

OOld 001a 0006 0000 0034 0000 8034 0804

Az említett mag: core hallgatási üzenetét

fut segédprogram felsorolja az összes karakter, amely az objektum fájlt. Ez megjeleníti a szimbólumok jelentését, azok típusa és neve. Ez a típus nem olyan hasznos, mint a többiek, de mégis hasznos lehet hibakeresés könyvtár fájljait.

Csapat AG, illetve archív (archiválás), segít fenntartani az indexelt Beebe lioteki által használt linker. ar csapat gyűjt egy vagy több Ob-ektnyh fájl egy könyvtárban. Ezen felül, akkor jelöljenek ki egy külön objektum-CIÓ fájlt a könyvtárból. Leggyakrabban a csapat látható az ar Make-fájlt. Ez egy óra, és kombinálhatók a használt funkciók egy könyvtárban. Tegyük fel például, hogy van egy funkció, amely elemzi a parancs fájlt, és mert a vonzereje egyes adatok vagy egy hívást, hogy megszerezze az információt a megadott hardver regiszterek. Ez a funkció igényel több futtatható. Archiválása ezt a funkciót egy külön könyvtárat könnyebb ellenőrizni a változat az E-üzembe a funkció csak egy helyen.