Nejlepší odpověď
Přenosný spustitelný soubor
Formát Portable Executable je formát souboru pro spustitelné soubory, objektový kód, DLL, soubory písem FON a další používané v 32bitových a 64bitových verzích operačních systémů Windows. Formát PE je datová struktura, která zapouzdřuje informace potřebné pro zavaděč operačního systému Windows ke správě zabaleného spustitelného kódu.
To zahrnuje odkazy na dynamické knihovny pro propojení, export a import tabulek API, data správy prostředků a podproces. – údaje o místním úložišti (TLS). V operačních systémech NT se formát PE používá pro soubory EXE, DLL, SYS (ovladač zařízení) a další typy souborů. Specifikace rozhraní Extensible Firmware Interface (EFI) uvádí, že PE je standardní spustitelný formát v prostředích EFI.
Odpověď
Přenositelnost zdrojového kódu C znamená, že pokud je požadovaná cílová platforma má k dispozici funkční kompilátor C, můžete přesunout svůj zdrojový kód C na cílovou platformu jeho překompilací, aniž byste jej museli upravovat. Protože téměř každá cílová platforma má k dispozici kompilátor jazyka C, je C považován za velmi přenosný programovací jazyk.
To znamená, že jednoduché psaní kódu v jazyce C dělá nezaručuje přenositelnost. Abyste se vyhnuli psaní kódu, který není přenosný, musíte cvičit. Například zápis kódu, který provede některý z následujících způsobí nepřenosný kód:
- Vytvoří předpoklady o velikostech jakýchkoli datových typů, jiných než char.
- Vytvoří předpoklady o tom, jak jsou data sladěna v paměti a uvnitř struktur.
- Vytváří předpoklady o tom, jak jsou data zabalena / vyplněna ve strukturách.
- Vytvoří předpoklady o uspořádání bajtů (big endian vs. malý endian) .
- Používá nestandardní rozšíření kompilátoru, které nemusí být k dispozici u všech implementací kompilátoru.
- Používá nestandardní rozšíření knihovny, které nemusí být k dispozici na všech platformách.
- Spoléhá se na jakékoli chování definované implementací, které může fungovat odlišně v jiné implementaci kompilátoru.
- Obsahuje jakékoli nedefinované chování, které může zdá se, že pracuje v jednom prostředí, ale v jiném prostředí se může chovat nepředvídatelně.
- Volá jakékoli rozhraní API (aplikační programovací rozhraní) do operačního systému systém, který nemusí být k dispozici ve všech prostředích.
- Vytváří předpoklady o konkrétních adresách paměti (např. konkrétní adresa paměti je namapována na registr hardwarového zařízení atd.).
- Vytváří předpoklady o velikosti ukazatele nebo o tom, že ukazatel má stejnou velikost jako int.
- Vytváří předpoklady o způsobu předávání argumentů (v zásobníku nebo v konkrétních registrech).
- Obsahuje jakýkoli zdrojový kód vloženého jazyka sestavení.
- Používá nejnovější a největší funkci jazyka C, kterou některé implementace kompilátoru ještě nemusí podporovat (a v některých případech nemusí být nikdy podporováno).
- Spoléhá se na knihovnu, která provádí některou z výše uvedených činností.
Toto není vyčerpávající seznam.
Pokud můžete Nepoužívejte nepřenosný kód, pak je nejlepší tento nepřenosný kód izolovat do samostatného zdrojového souboru. Pak, když potřebujete přesunout kód na novou cílovou platformu, je zcela jasné, jakou podmnožinu zdrojového kódu je třeba upravit.