Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Programok fordítása, szerkesztése és végrehajtása.

Slides:



Advertisements
Hasonló előadás
64 bites architektúra, csapdák és átjárók Tóth Sándor Terméktámogatási tanácsadó.
Advertisements

Grafikus tervezőrendszerek programozása 10. előadás.
Operációs Rendszerek I.
GraphGame gg001-Triangle
BIOS A BIOS mozaikszó, a Basic Input/Output System rövidítése, magyar fordításban alapvető ki- és bemeneti rendszerként szokták emlegetni.
Irodai és rendszer fájltípusok
2 Forrás: The Standish Group International, Extreme Chaos, The Standish Group International, Inc., 2000.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
9. előadás (2005. április 26.) Parancssor argumentum kezelés példák (K&R) Fordítóprogramok A C előfordító 1.
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
Hibakezelés és Tesztelés a Visual Studio.NET-ben
A Windows 7 automatizált telepítése Windows AIK használatával
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
1 Programozás alapjai GEIAL312B (ANSI C) BSc (Bachelor of Science) / Alap képzés 2005/2006. őszi félév Miskolci Egyetem Általános Informatikai Tanszék.
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
A memória.
Ellenőrző kérdések a)Auto-indexing enabled b)Auto-indexing disabled c)Nem eldönthető 1.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
VFP programozása report készítése menü készítése dinamikus elemek
Számítógépes grafika OpenGL 1. gyakorlat.
Készítette: Keszthelyi Zsolt
DirectX a grafika laboron kívül. Mire lesz szükség Itt vannak a szükséges include és lib: iles/DXMinimalPack.zip.
Oracle Database 10g szoftver telepítése
Egyszerű webes alkalmazás fejlesztése
WEB Technológiák ISAPI ME Általános Informatikai Tsz. dr. Kovács László.
1 Operációs rendszerek Az NT folyamatok kezelése.
Takács Béla Operációs rendszerek 2.. „Néhány” fontos operációs rendszer EgyfelhasználósTöbbfelhasználós DOS (Microsoft)UNIX MS-DOS (Microsoft)LINUX.
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
V 1.0 ÓE-NIK, Programozás I. A Microsoft Visual Studio 2010 használata.
Mikrokontroller (MCU, mikroC)
1.4. Fordítás, szerkesztés, az objektumkönyvtár használata.
Gábor Dénes Főiskola Rendszertechnikai Intézet
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Széchenyi Isván Egyetem Számítógépes hálózatok II 1 Számítógépes Hálózatok II Széchenyi István Egyetem.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Visual Basic 2008 Express Edition
Verhás & Verhás Szoftver Manufaktúra Mi is az a Maven? build és deployment eszköz mint az ANT dependencia manager mint az IVY riport készítő.
ARM tanfolyam 2. előadás.
Komoróczy Tamás 1 Java programozási nyelv A nyelv alapjai.
ORACLE ORDBMS adminisztrációs feladatok 3. rész dr. Kovács László 2004.
Magas rendelkezésre állású Hyper-V rendszer építése
Egy második generációs gép (az IBM 7094) felépítése
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Podoski Péter és Zabb László. Bevezető Algoritmus-vizualizáció témakörében végeztünk kutatásokat és fejlesztéseket Felmértük a manapság ismert eszközök.
A C++ nyelv.
WEBSTAR CSOPORT WC S ADATBÁZIS VERZIÓKÖVETÉSE: LIQUIBASE Marics Tamás június 20.
A Visual Basic nyelvi elemei
Számítógépes grafika gyakorlat DirectX segítség A következő dolgokra van szükség: CG Toolkit: 
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
IT ALAPFOGALMAK HARDVER.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
DLL használata és készítése Feladat
Informatikai gyakorlatok 11. évfolyam
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Erőforrások strukturálása Készítette: Szentirmai Róbert (minden jog fenntartva)
Symbol mobil terminálok Szoftver frissítések, image-ek, hasznos információk Széles Gábor és Gulyás László BCS Hungary Kft.
Maven és Ant Build eszközök bemutatása
Static Source Code Analysis For PHP Vulnerabilities
International Olympiad in Informatics
Web programozás és haladó fejlesztési technikák – C#
Clang tooling.
Unit tesztelés Swift-ben
Előadás másolata:

Alkalmazások és operációs rendszerek optimizálása „Babeş-Bolyai” Tudományegyetem, Matematika-Informatika Kar Programok fordítása, szerkesztése és végrehajtása (Visual C alatt) előadás dr. Robu Judit szeminárium drd. Lukács Sándor

BBTE, Alkalmazások és operációs rendszerek optimizálása 2 Eszközök Microsoft Visual C/C++ kompiler (14.0) ...\VC\bin\cl.exe Microsoft Linker (8.00)  …\VC\bin\link.exe Microsoft Library Manager (8.00)  …\VC\bin\lib.exe Microsoft COFF/PE Dumper (8.00)  …\VC\bin\dumpbin.exe Microsoft Browse Information Maintance Utility (8.00)  …\VC\bin\bscmake.exe Microsoft Portable Executable and Common Object File Format Specification  MSDN / Platform SDK An In-Depth Look into the Win32 Portable Executable File Format  MSDN Magazine

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 3 Program konfigurációk és fordítások 1 Solution → N Projekt x K Platform  Build → Configuration Manager... debug (checked) és release (free) fordítások  debug – debug szekciók, szimbolikus információk  release – gyors, optimizált különböző fordítási módok  Build – csak a módosított állományokat •a Visual C tud függvényenként is fordítani (incremental build)  Rebuild (Build All) – minden állományt  érvényes lehet csak az aktuális projektre vagy a teljes Solution-ra a kiterjesztés fontos, nyelvi különbségek vannak! .CPP kiterjesztés → alapértelmezetten C++ fordító .C kiterjesztés → alapértelmezetten C fordító Project → Project Dependencies... Build → Clean

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 4 Programok fejlesztése és betöltése source 1 source 2 source N kompiler obj 1 obj 2 obj N könyvtár szerkesztő LIB függvény könyvtár source 1 source 2 source N kompiler obj 1 obj 2 obj N linker futtatható EXE állomány source 1 source 2 source N kompiler obj 1 obj 2 obj N linker import könyvtár DLL EXE kód és adat inicializálatlan adat DLL verem... loader statikus import dinamikus import

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 5 C/C++ állományok szerkezete... #include "buborekpublic.h"- külső függőségek (kód és adat) PRENDEZ rendezo = &RendezBuborek; - globális adatok int main(int argc, char* argv[]) - állományon belüli kód { PVEKTOR pV;- lokális adat HMODULE module; InitRand();- más modulban lévő kód hívása module = LoadLibrary(L"gyors.dll");... if (0 == Inicializal(&pV, 100, 1))- más állományban lévő kód hívása...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 6 Visual C/C++ opciók 1 Project → Properties (ALT+F7)  mindig vigyázni kell a konfiguráció és a platform kiválasztására  van All Configurations és All Platforms opció Configuration Properties → General  Output Directory – a végső bináris állományok könyvtára (EXE, DLL, LIB, ILK, PDB,...) •sok hasznos makró, pl. $(SolutionDir), $(ConfigurationName) •használhatunk relatív könyvtárakat, pl. ″..\randinit″  Intermediate Directory – átmeneti, ideiglenes állományok könyvára  Extensions to Delete on Clean  Build Log File – fordítási / szerkesztési hibák esetén jól fog •részletesen tartalmazza a parancssor opciókat  Configuration Type •EXE, LIB, DLL, Makefile (pl. driverek számára)  Whole Program Optimization •Use Link Time Code Generation (/LTCG)

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 7 Visual C/C++ opciók 2 C/C++ → General  Additional Include Directories – /I[path].H állományok  Debug Information Support – /Zi /ZI  Warning Level – /W0... /W3 /W4 •mindig /W4-el kell fordítani (ritkán elfogadható a /W3)  Detect 64-bit Portability Issues – /Wp64 •pl. pointerek ellenőrzése  Treat Warnings As Errors – /WX C/C++ → Optimization  Optimization – /Od (nincs, debug mód) /O2 (maximális)  Inline Function Expansion – /Ob1 (csak __inline) /Ob2  Whole Program Optimization – /GL

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 8 Visual C/C++ opciók 3 C/C++ → Preprocessor  Preprocessor Definitions •WIN32,_DEBUG,_CONSOLEvagy _LIB •WIN32,NDEBUG,_CONSOLEvagy _LIB •megfelel a #define preprocesszor direktívának  Generate Preprocessed File – /P •kiválóan alkalmazható ha problémáink vannak bonyolult makrók fordításával C/C++ → Code Generation  Runtime Library •/MT /MTd – multi-threaded, statikus import •/MD /MDd – multi-threaded, DLL load-time import  Enable Function-Level Linking – /GyEdit & Continue  Enable Enhanced Instruction Set – /arch:SSE2  Floating Point Model – /fp:precise vagy /fp:fast •az előző két opció %-ot is jelenthet lebegőpontos programok esetén C/C++ → Language  Disable Language Extensions – /Za •ANSI, pl. ha Linux-ra is kell fordítani

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 9 Visual C/C++ opciók 4 C/C++ → Output Files  Assembler Output – /FA /FAs/Fa[name] •hasznos, ha elemezni akarjuk a C kompiler generálási módját vagy fel akarjuk használni a kódot asszembly szinten  Object File Name – /Fo[name]  Program Database File Name (.PDB) – /Fd[name] •a.PDB-re szüksége van a debugger-nek C/C++ → Browse Information  Enable Browse Information – /FR/FR[name] •referenciát készít a forráskódról, így gyorsan lehet ugrani és kereni IDE-ből C/C++ → Advanced  Calling Convention – /Gd (__cdecl) /Gr (__fastcall) /Gz (__stdcall)  Use Full Paths – /FC •hasznos, ha bonyolult könyvtárstruktúrából (pl. több verzió) fordítjuk a programot C/C++ → Command Line  ezt érdemes időnként átnézni

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 10 Visual C/C++ opciók 5 Linker → General  Output File – /OUT:[file]  Show Progress – /VERBOSE  Enable Incremental Linking – /INCREMENTAL  Additional Library Directories – /LIBPATH:[dir].LIB állományok Linker → Input  Additional Dependencies.LIB állományok Linker → Debugging  Generate Debug Info – /DEBUG •szükséges Release fordítások esetén is szimbolikus debug számára  Generate Program Database File – /PDB:name  Generate Map File – /MAP/MAP:[file]  Map Exports – /MAPINFO:EXPORTS •jól fog ha C és Asm kódot használunk vagy speciális trükköket alkalmazunk Linker → System  SubSystem – /SUBSYSTEM:CONSOLE/SUBSYSTEM:WINDOWS /SUBSYSTEM:NATIVE/SUBSYSTEM:POSIX

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 11 MAP file példa... Preferred load address is Start Length Name Class 0001: dcH.text CODE... Address Publics by Value Rva+Base Lib:Object 0001: f buborek.obj 0001: _RendezBuborek f buborek.obj... Exports ordinal name 1 _RendezBuborek exported name: RendezBuborek IDA

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 12 Visual C/C++ opciók 6 Linker → Advanced  Entry Point – /Entry:[symbol] •nem kötelező C-ben a main  Import Library – /IMPLIB:[name] •load-time linking számára  Target Machine – /MACHINE:X86 /MACHINE:X64 Browse Information → General  Output File – /o[file] Build Events  Pre-Build Event – előkészítés a fordításra  Pre-Link Event – előkészítése a szerkesztésre  Post-Build Event – fordítás utáni utófeldolgozás •pl. következő verziószám generálása.H file-ba, automatikus backup a projektről stb. Makefile project esetén fontos a NMake opciók beállítása  pl. driverek fejlesztése esetén  megengedi a code-browsing-et és az IntelliSense integrálását

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 13 Programok szerkesztése (link) 1 static linking  a leggyakrabban használt •.OBJ-k esetén is egy programon belül, vagy fordítás után az.OBJ-k és külső, expliciten megadott.LIB állományok felhasználásával történik  az exportokat egy LIB tartalmazza  szerkesztés közben a LIB beszerkesztődik a végső állományba  megengedi a forráskód nélküli disztribúciót (.H és.LIB) load-time dynamic linking  az exportokat egy DLL tartalmazza  szerkesztés közben egy import LIB-el kell összeszerkeszteni a végső állományt – explicit függvényhívások  a relokáció során történik az importok megoldása  egy DLL-t több processz is megoszthat

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 14 Programok szerkesztése (link) 2 run-time dynamic linking  az exportokat egy DLL tartalmazza  nincs szükség import LIB-re  LoadLibrary() – DLL betöltése; GetProcAddress() – függvény kezdőcímének betöltése  megengedi a programok könnyű további bővítését és frissítését  plugin rendszerek load-time linking esetén ha nem található a DLL, a program nem indítható

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 15 PE állományok – Bevezető Microsoft specifikus COFF (UNIX eredetű) PE32 és PE32+ formátum (ez utóbbi 64 bites) MS-DOS kompatibilis STUB, 0x3C-nél jelzett DWORD pozíción kezdődik a PE/COFF fejléc 0x014C – Intel 386 0x0004 – 4 szekció 0x00E0 – op. fejléc mérete

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 16 PE állományok – Alapfogalmak ImageBase – egy PE állomány memóriába való betöltése után az állomány báziscíme VA – egy változó, függvény stb. virtuális címe, ahová a memóriába be fog kerülni a betöltés során  előre nem ismert (csak az alpértelmezett báziscím esetén), mert az állomány báziscíme a betöltés során relokálódhat RVA – bázisrelatív cím (VA-ImageBase)  előre ismert, mivel az elemek egymáshoz viszonyított pozíciója konstans File Pointer – egy elem effektív pozíciója a PE vagy OBJ állományon belül Szekció – a kód és adat alapegysége PE/COFF állományokban  pl. a teljes kód lehet egy szekcióban, vagy mindenik függvény lehet külön szekcióba  egy szekció RAW adatai a PE állományból folytonosan kell betöltődjenek a memóriába  vannak speciális szekciók, pl..reloc,.tls  egy szekció hasonlít némiképp egy x86-os szegmensre

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 17 PE állományok – Szekciók Name VirtualSize – szekcíó mérete a memóriában VirtualAddress – RVA cím SizeOfRawData – lehet kisebb mint VirtualSize PointerToRawData – File Pointer a RAW adatokhoz Characteristics – jellemzők (írható, olvasható stb.)

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 18 PE állományok – Betöltés a memóriába a szekciók mérete eltérő az állományban és betöltve a memóriába

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 19 PE állományok – Opcionális fejléc Magic – az állomány típusa SizeOfCode SizeOfInitializedData SizeOfUnitializedData AddressOfEntryPoint – RVA kezdőcím ImageBase – báziscím SizeOfImage – MS-DOS stub, fejlécek, összes szekció Checksum Subsystem – 3 – Console Export Table – RVA és méret Import Table – RVA és méret Resource Table – RVA és méret

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 20 PE állományok – Exportok (.edata) három táblával történik az export  Export Address Table – RVA címeket tartalmaz  Export Name Pointer Table – mutatókat az exportok nevére  Export Ordinal Table – 16 bites indexek az EAT-ba NumberOfNamePointers – az ENPT és EOT elemeinek száma AddressTableEntries – az EAT bemeneteinek száma  lehet nagyobb mint NumberOfNamePointers ExportAddressTableRVA NamePointerRVA OrdinalTableRVA

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 21 Export példa...\visual_c_peldak\experiment>dumpbin /exports gyors.dll Dump of file gyors.dll File Type: DLL Section contains the following exports for gyors.dll characteristics 452B3F67 time date stamp Tue Oct 10 09:36: version 1 ordinal base 1 number of functions 1 number of names ordinal hint RVA name Rendez = _Rendez

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 22 PE állományok – Importok (.idata) minden DLL számára egy IMAGE_IMPORT_DESCRIPTOR két táblázat  Import Lookup Table – táblázat 32 bites szám szerinti importokra (import by ordinal) vagy név-mutatókra (import by name)  Import Address Table – effektíve 32 bites címek a relokáció után NameRVA – a DLL nevére mutat ImportLookupTableRVA ImportAddressTableRVA

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 23 Import példa \visual_c_peldak\experiment>dumpbin /imports rendez1.exe Section contains the following imports: KERNEL32.dll Import Address Table Import Name Table F8 FreeLibrary 1A0 GetProcAddress... buborek.dll 40204C Import Address Table Import Name Table 0 RendezBuborek MSVCR80.dll...

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 24 Importok egy PE állományban minden függvény számára egy-egy stub generálódik a stub egy táblázatban lévő címre ugrik, ezt a loader fogja behelyettesíteni (relokáció)

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 25 Programok betöltése (load) amikor egy futtatható állományt a memóriába töltünk be és előkészítjük a végrehajtásra  LoadLibrary() – DLL betöltése  CreateProcess() – process indítása (pl. EXE) memória foglalódik le a kód és adat szekciók számára  read-only vagy read-write adatok  NX bit beállítása kód szegmensek esetén relokáció (explicit JMP-ok, CALL-ok megoldása)  elég kevés van, mert a legtöbb az relatív JMP/CALL •az x64 megengedi az IP relatív címzést  load-time importok elvégzése

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 26 Programok végrehajtása (execution) a processzor kikódolja és végrehajtja az utasításokat bővebben lesz szó erről az ASM optimizálásoknál

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 27 Generált kód példa

2006BBTE, Alkalmazások és operációs rendszerek optimizálása 28 Köszönöm a figyelmet!