1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
/* Chrysalide - Outil d'analyse de fichiers binaires
* pglist.h - prototypes pour la gestion de l'ensemble des greffons
*
* Copyright (C) 2009-2017 Cyrille Bagard
*
* This file is part of Chrysalide.
*
* Chrysalide is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* Chrysalide is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _PLUGINS_PGLIST_H
#define _PLUGINS_PGLIST_H
#include <stdbool.h>
#include <gtk/gtk.h>
#include "plugin-def.h"
#include "plugin.h"
/* Procède au chargement des différents greffons trouvés. */
bool init_all_plugins(bool);
/* Procède au déchargement des différents greffons présents. */
void exit_all_plugins(void);
/* Verrouille ou déverrouille l'accès en lecture à la liste. */
void _lock_unlock_plugin_list_for_reading(bool lock);
#define lock_plugin_list_for_reading() _lock_unlock_plugin_list_for_reading(true)
#define unlock_plugin_list_for_reading() _lock_unlock_plugin_list_for_reading(false)
/* Ajoute un greffon à la liste principale de greffons. */
void _register_plugin(GPluginModule *);
/* Ajoute un greffon à la liste principale de greffons. */
void register_plugin(GPluginModule *);
/* Charge tous les greffons restant à charger. */
void load_remaning_plugins(void);
/* Founit le greffon répondant à un nom donné. */
GPluginModule *get_plugin_by_name(const char *, size_t *);
/* Founit less greffons offrant le service demandé. */
GPluginModule **get_all_plugins_for_action(PluginAction, size_t *);
/**
* Définitions des opérations appliquables à une catégories de greffons.
*/
#define process_all_plugins_for(a, f, ...) \
{ \
size_t __count; \
GPluginModule **__list; \
size_t __i; \
__list = get_all_plugins_for_action(a, &__count); \
for (__i = 0; __i < __count; __i++) \
{ \
f(__list[__i], a, __VA_ARGS__); \
g_object_unref(G_OBJECT(__list[__i])); \
} \
if (__list != NULL) \
free(__list); \
} \
while (0)
/* DPS_PG_MANAGEMENT */
#define notify_native_loaded \
process_all_plugins_for(PGA_NATIVE_LOADED, g_plugin_module_notify_native_loaded, NULL)
/* DPS_SETUP */
#define include_plugin_theme(d, r, c) \
process_all_plugins_for(PGA_GUI_THEME, g_plugin_module_include_theme, d, r, c)
/* DPS_CONTENT */
#define handle_binary_content(a, c, i, s) \
process_all_plugins_for(a, g_plugin_module_handle_binary_content, c, i, s)
#define handle_loaded_content(a, c, i, s) \
process_all_plugins_for(a, g_plugin_module_handle_loaded_content, c, i, s)
/* DPS_FORMAT */
#define handle_known_format_analysis(a, f, g, s) \
process_all_plugins_for(a, g_plugin_module_handle_known_format_analysis, f, g, s)
#define handle_binary_format_analysis(a, f, g, s) \
process_all_plugins_for(a, g_plugin_module_handle_binary_format_analysis, f, g, s)
#define preload_binary_format(a, f, i, s) \
process_all_plugins_for(a, g_plugin_module_preload_binary_format, f, i, s)
#define attach_debug_format(f) \
process_all_plugins_for(PGA_FORMAT_ATTACH_DEBUG, g_plugin_module_attach_debug_format, f)
/* DPS_DISASSEMBLY */
#define process_disassembly_event(a, b, s, c) \
process_all_plugins_for(a, g_plugin_module_process_disassembly_event, b, s, c)
/* DPS_DETECTION */
#define detect_external_tools(a, cnt, v, n, c) \
process_all_plugins_for(a, g_plugin_module_detect_external_tools, cnt, v, n, c)
#endif /* _PLUGINS_PGLIST_H */
|