xbmc
xbmc
cores
DllLoader
DllLoader.h
1
/*
2
* Copyright (C) 2005-2018 Team Kodi
3
* This file is part of Kodi - https://kodi.tv
4
*
5
* SPDX-License-Identifier: GPL-2.0-or-later
6
* See LICENSES/README.md for more information.
7
*/
8
9
#pragma once
10
11
#include "coffldr.h"
12
#include "LibraryLoader.h"
13
14
// clang-format off
15
#if defined(__linux__) && \
16
!defined(__aarch64__) && \
17
!defined(__alpha__) && \
18
!defined(__arc__) && \
19
!defined(__arm__) && \
20
!defined(__loongarch__) && \
21
!defined(__mips__) && \
22
!defined(__powerpc__) && \
23
!defined(__or1k__) && \
24
!defined(__riscv) && \
25
!defined(__SH4__) && \
26
!defined(__s390x__) && \
27
!defined(__sparc__) && \
28
!defined(__xtensa__)
29
#define USE_LDT_KEEPER
30
#include "ldt_keeper.h"
31
#endif
32
// clang-format on
33
34
#ifndef NULL
35
#define NULL 0
36
#endif
37
38
class
DllLoader
;
39
40
41
typedef
struct
Export
42
{
43
const
char
* name;
44
unsigned
long
ordinal;
45
void
*
function
;
46
void
* track_function;
47
}
Export
;
48
49
typedef
struct
ExportEntry
50
{
51
Export
exp;
52
ExportEntry
* next;
53
}
ExportEntry
;
54
55
typedef
struct
_LoadedList
56
{
57
DllLoader
* pDll;
58
_LoadedList
* pNext;
59
}
LoadedList
;
60
61
class
DllLoader
:
public
CoffLoader
,
public
LibraryLoader
62
{
63
public
:
64
DllLoader
(
const
char
*dll,
bool
track
=
false
,
bool
bSystemDll =
false
,
bool
bLoadSymbols =
false
,
Export
* exports = NULL);
65
~
DllLoader
()
override
;
66
67
bool
Load()
override
;
68
void
Unload()
override
;
69
70
int
ResolveExport(
const
char
*,
void
** ptr,
bool
logging =
true
)
override
;
71
int
ResolveOrdinal(
unsigned
long
ordinal,
void
** ptr)
override
;
72
bool
HasSymbols()
override
{
return
m_bLoadSymbols && !m_bUnloadSymbols; }
73
bool
IsSystemDll()
override
{
return
m_bSystemDll; }
74
HMODULE GetHModule()
override
{
return
(HMODULE)hModule; }
75
76
Export
* GetExportByFunctionName(
const
char
* sFunctionName);
77
Export
* GetExportByOrdinal(
unsigned
long
ordinal);
78
protected
:
79
int
Parse();
80
int
ResolveImports();
81
82
void
AddExport(
unsigned
long
ordinal,
void
*
function
,
void
* track_function = NULL);
83
void
AddExport(
char
* sFunctionName,
unsigned
long
ordinal,
void
*
function
,
void
* track_function = NULL);
84
void
AddExport(
char
* sFunctionName,
void
*
function
,
void
* track_function = NULL);
85
void
SetExports(
Export
* exports) { m_pStaticExports = exports; }
86
87
protected
:
88
// Just pointers; don't delete...
89
ImportDirTable_t
*ImportDirTable;
90
ExportDirTable_t
*ExportDirTable;
91
bool
m_bTrack;
92
bool
m_bSystemDll;
// true if this dll should not be removed
93
bool
m_bLoadSymbols;
// when true this dll should not be removed
94
bool
m_bUnloadSymbols;
95
ExportEntry
* m_pExportHead;
96
Export
* m_pStaticExports;
97
LoadedList
* m_pDlls;
98
99
#ifdef USE_LDT_KEEPER
100
ldt_fs_t
* m_ldt_fs;
101
#endif
102
103
void
PrintImportLookupTable(
unsigned
long
ImportLookupTable_RVA);
104
void
PrintImportTable(
ImportDirTable_t
*ImportDirTable);
105
void
PrintExportTable(
ExportDirTable_t
*ExportDirTable);
106
107
int
ResolveOrdinal(
const
char
*,
unsigned
long
,
void
**);
108
int
ResolveName(
const
char
*,
char
*,
void
**);
109
const
char
* ResolveReferencedDll(
const
char
* dll);
110
int
LoadExports();
111
void
LoadSymbols();
112
static
void
UnloadSymbols();
113
};
LibraryLoader
Definition:
LibraryLoader.h:17
_LoadedList
Definition:
DllLoader.h:55
Export
Definition:
DllLoader.h:41
ExportDirTable_t
Definition:
coff.h:431
DllLoader
Definition:
DllLoader.h:61
ldt_fs_t
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! This file MUST be in main library because LDT must...
Definition:
ldt_keeper.h:26
ImportDirTable_t
Definition:
coff.h:458
CoffLoader
Definition:
coffldr.h:16
KODI_ADDON_VISUALIZATION_TRACK
Definition:
visualization.h:21
ExportEntry
Definition:
DllLoader.h:49
Generated by
1.8.13