Programování ve Windows Dynamické knihovny. Andrea Číková Martin Osovský

Podobné dokumenty
ČÁST 1. Základy 32bitového programování ve Windows

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Projekt do předmětu PAS. Textový editor

Příloha A: Operační systémy Windows NT

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

09. Memory management. ZOS 2006, L.Pešička

Programování II. Návrh programu I 2018/19

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

Práce se soubory. Základy programování 2 Tomáš Kühr

Algoritmizace a programování

IPA - Lab.1 Úvod do programování v ASM

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

přetížení operátorů (o)

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

11. Přehled prog. jazyků

Instalace a konfigurace web serveru. WA1 Martin Klíma

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Úvod Seznámení s předmětem Co je.net Vlastnosti.NET Konec. Programování v C# Úvodní slovo 1 / 25

Komponenty v.net. Obsah přednášky

TÉMATICKÝ OKRUH Softwarové inženýrství

Velmi stručný návod jak dostat data z Terminálu Bloomberg do R

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

TG Motion verze 4 Modul Virtuální PLC návod k obsluze

Struktury a dynamická paměť

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

1 Webový server, instalace PHP a MySQL 13

IUJCE 07/08 Přednáška č. 6

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Helios RED a Internetový obchod

Struktura programu v době běhu

Obsah A: ZAČÍNÁME S PROGRAMEM PSO2.EXE B: OVĚŘUJEME FUNKCE SYSTÉMU PSO2 C: VYTVÁŘÍME DATABÁZOVÉ TABULKY D: PRÁCE S PAMĚTÍ UDÁLOSTÍ

KAPITOLA 10. Implementace mezinárodní podpory a lokalizace. V této kapitole:

PB161 Programování v jazyce C++ Přednáška 4

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

účetnictví pro živnostníky a malé společnosti

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Konstruktory a destruktory

Implementace systémů HIPS: historie a současnost. Martin Dráb

IB111 Úvod do programování skrze Python Přednáška 7

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Windows a real-time. Windows Embedded

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Zadejte ručně název první kapitoly. Manuál. Rozhraní pro program ETABS

Přidělování paměti I Mgr. Josef Horálek

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

K8055D.DLL v Technická příručka. Úvod. Obecné. Konvence volání. Nastavení adresy karty

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

Jazyk symbolických adres

Univerzální software pro programátory ASIX. Uživatelská příručka

Programování v jazyce C a C++

1. Webový server, instalace PHP a MySQL 13

Přidělování paměti II Mgr. Josef Horálek

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Stavba operačního systému

Zásadní dovednosti Indesign. Stručné otázky a odpovědi

operační systém vjj 1

PHP tutoriál (základy PHP snadno a rychle)

Úprava naměřených stavů

TIA Portal Openness Generování projektu.

46 Objekty a atributy

O datových typech a jejich kontrole

Vstup a výstup datové proudy v C

Transformace digitalizovaného obrazu

Untitled 04/02/2018, 17:47

PB161 Programování v jazyce C++ Přednáška 4

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

David Bednárek Jakub Yaghob Filip Zavoral.

Programování v jazyku C# II. 9.kapitola

Import se spouští v Číselníku zboží stiskem klávesové kombinace <Shift F6>. Zobrazí se parametry:

Program pro flexibilní tvorbu evidencí. VIKLAN - Evidence. Uživatelská příručka. pro seznámení se základními možnostmi programu

Management procesu I Mgr. Josef Horálek

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Assembler DRUHÁ ČÁST OBSAH.

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

User Account Control. a jak jej obejít. Martin Dráb martin.drab@ .cz

Návod k práci s programem MMPI-2

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Podpora skriptování v Audacity

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

Jan Kratochvíl, F 3 MOD. 15. února 2004

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Práce s texty, Transformace rastru, Připojení GPS

Softwarové komponenty a Internet

Desktop systémy Microsoft Windows

Práce se soubory. Úvod do programování 2 Tomáš Kühr

Semestrální práce 2 znakový strom

Objektově orientované programování v jazyce Python

Nastavení CADprofi pro CAD, aktivace a registrace CADprofi

LabVIEW přes 20 let inovací

1. ESO9 MAJETEK ZÁKLADNÍ VLASTNOSTI DOPORUČENÝ HW... 3

ProjectWise V8 XM Edition

Využití aplikace SketchUp pro tvorbu jednoduchého informačního systému

Transkript:

Programování ve Windows Dynamické knihovny Andrea Číková Martin Osovský

Agenda K čemu jsou dobré? Jaký mají vztah ke spustitelným souborům a procesům? Jak se sestavují? Jak se načítají? Jak se hledají? Rebasing a binding API hooking

Význam dll knihoven Velký význam ve windows sdílení kódu kernel32.dll procesy, vlákna a paměť user32.dll okna a zprávy gdi32.dll grafika a texty advapi32.dll, comdlg32.dll, comctl32.dll další pro ještě specializovanější věci (rpc ap.) C runtime library

Příklady použití rozšíření možností aplikací (pluginy, umožnění úprav třetím stranám, API) zjednodušení procesu vývoje (ale aplikace by měla mít co nejméně souborů) šetření pamětí (dll se do paměti načítá jen jednou crt) sdílení resourců (dialogy, ikony, řetězce) lokalizace

Příklady použití rozdíly v platformách zvláštní vlastnosti kódu v knihovnách dá se hookovat hostují COM a ActiveX komponenty mohou hostovat.net knihovny

Dll a spouštěná aplikace dll je PE modul, ke kterému se loader chová jinak než k exe modulu dll se mapuje do adresového prostoru procesu implicitně při načítání aplikace explicitně voláním funkce po načtení je kód k disposici všem vláknům procesu sdílení kódu používá copy on write (globální a statické proměnné) dll se rozpustí v paměti procesu, který ji načetl

dll a paměť statická vs. dynamická crt kód, který uvolňuje paměť by měl být pro jistotu ve stejném modulu jako ten, který ji rezervoval

Sestavování a implicitní načítání je třeba dostat symboly do tabulky exportů dll modulu declspec(dllexport) je třeba, aby se neprovádělo pozmněňování jmen extern C v cílovém modulu je třeba deklarovat funkci jako extern nebo lépe jako declspec(dllimport) exportované funkce jsou v souboru.lib, který se linkuje do cílového modulu (pro dll je to jen seznam symbolů, jinak statická knihovna) je třeba použít sdílený hlavičkový soubor

Sestavování jiná možnost je použít def soubor se sekcí EXPORT následovanou jmény symbolů nebo parametr linkeru /export utilita DumpBin s parametry imports nebo exports

Sestavování - ilustrace

Načítání knihovny knihovna se načte do paměťového prostoru na tzv. module base address modul specifikuje preferred base address každý symbol má relative virtual address z import sekce exe se načte, které knihovny se mají načíst ty se načtou a s jejich import sekcemi se provede totéž pak se spočítají skutečné adresy symbolů a ty se vloží do import sekce exe (binding)

Načítání knihovny pokud nějaký modul nelze vložit na jeho PBA, provede se tzv. rebasing rebasing lze provést pro všechny moduly předem pomocí rebase.exe je to složitý proces (musí se měnit všechny adresy u všech instrukcí v modulu) kvůli copy on write to zabírá místo v systémovém page file binding lze provést předem pomocí bind.exe zápis do import sekce také přesune paměť do systémového page file

Ruční načítání LoadLibraryEx parametr flags: DONT_RESOLVE_DLL_REFERENCES LOAD_LIBRARY_AS_DATAFILE LOAD_LIBRARY_AS_IMAGE_RESOURCE LoadLibrary - bez flags Uvolnění knihovny FreeLibrary Proces si drží počet odkazů na nějakou knihovnu (je-li 0, uvolní ji z paměti - virtuální)

Načítání symbolu je třeba mít typedef na příslušný typ funkce a proměnnou tohoto typu GetProcAddress načte adresu příslušného symbolu v dll symbol voláme normální notací volání funkce

Vstupní bod Dll Dll může obsahovat funkci DllMain ta se volá když se knihovna načte (hlavní vlákno, nebo vlákno, které zavolalo LoadLibrary) když se vytvoří vlákno a knihovna je již načtena (příslušné vlákno) když končí vlákno a knihovna je ještě načtena (příslušné vlákno) když se knihovna uvolní z paměti (hlavní vlákno, nebo vlákno, které zavolalo FreeLibrary)

Vstupní bod parametr reason rozlišuje, proč byla DllMain zavolána při hodnotě DLL_PROCESS_ATTACH se neignoruje návratová hodnota, pokud je FALSE při implicitním načítání zhavaruje celý proces LoadLibrary vrátí NULL