Rizin
unix-like reverse engineering framework and cli tools
rz_demangler.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2021 RizinOrg <info@rizin.re>
2 // SPDX-FileCopyrightText: 2021 deroad <wargio@libero.it>
3 // SPDX-License-Identifier: LGPL-3.0-only
4 
5 #ifndef RZ_DEMANGLER_H
6 #define RZ_DEMANGLER_H
7 #include <rz_types.h>
8 #include <rz_list.h>
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 RZ_LIB_VERSION_HEADER(rz_demangler);
15 
16 typedef struct rz_demangler_plugin_t {
17  const char *language;
18  const char *author;
19  const char *license;
20  RZ_OWN char *(*demangle)(RZ_NONNULL const char *symbol);
22 
23 typedef struct rz_demangler_t {
26 
27 typedef bool (*RzDemanglerIter)(const RzDemanglerPlugin *plugin, void *data);
28 
29 #define rz_demangler_plugin_demangle(x, y) ((x) && RZ_STR_ISNOTEMPTY(y) ? (x)->demangle(y) : NULL)
30 
31 RZ_API RZ_OWN char *rz_demangler_java(RZ_NULLABLE const char *symbol);
32 RZ_API RZ_OWN char *rz_demangler_cxx(RZ_NONNULL const char *symbol);
33 RZ_API RZ_OWN char *rz_demangler_objc(RZ_NONNULL const char *symbol);
34 RZ_API RZ_OWN char *rz_demangler_rust(RZ_NONNULL const char *symbol);
35 RZ_API RZ_OWN char *rz_demangler_msvc(RZ_NONNULL const char *symbol);
36 
42 RZ_API bool rz_demangler_resolve(RZ_NONNULL RzDemangler *demangler, RZ_NULLABLE const char *symbol, RZ_NONNULL const char *language, RZ_NONNULL RZ_OWN char **output);
43 
44 #ifdef __cplusplus
45 }
46 #endif
47 
48 #endif /* RZ_DEMANGLER_H */
#define RZ_API
RZ_API void rz_demangler_plugin_iterate(RZ_NONNULL RzDemangler *demangler, RZ_NONNULL RzDemanglerIter iter, RZ_NULLABLE void *data)
Iterates over the plugin list.
Definition: demangler.c:127
RZ_API RZ_OWN char * rz_demangler_cxx(RZ_NONNULL const char *symbol)
Demangles c++ symbols.
Definition: demangler.c:45
RZ_API RZ_OWN char * rz_demangler_objc(RZ_NONNULL const char *symbol)
Demangles objc symbols.
Definition: demangler.c:56
RZ_API RZ_OWN RzDemangler * rz_demangler_new(void)
Initializes the plugin list and returns a RzDemangler struct.
Definition: demangler.c:81
RZ_API RZ_OWN char * rz_demangler_msvc(RZ_NONNULL const char *symbol)
Demangles microsft vc symbols.
Definition: demangler.c:74
RZ_API RZ_OWN char * rz_demangler_java(RZ_NULLABLE const char *symbol)
Demangles java symbols.
Definition: demangler.c:38
RZ_API RZ_OWN char * rz_demangler_rust(RZ_NONNULL const char *symbol)
Demangles rust symbols.
Definition: demangler.c:63
RZ_LIB_VERSION_HEADER(rz_demangler)
bool(* RzDemanglerIter)(const RzDemanglerPlugin *plugin, void *data)
Definition: rz_demangler.h:27
RZ_API RZ_BORROW const RzDemanglerPlugin * rz_demangler_plugin_get(RZ_NONNULL RzDemangler *demangler, RZ_NONNULL const char *language)
Returns a demangler plugin pointer based on the language that is found.
Definition: demangler.c:168
RZ_API bool rz_demangler_resolve(RZ_NONNULL RzDemangler *demangler, RZ_NULLABLE const char *symbol, RZ_NONNULL const char *language, RZ_NONNULL RZ_OWN char **output)
Resolves a symbol based on its language and return an output that needs to be freed.
Definition: demangler.c:187
struct rz_demangler_t RzDemangler
struct rz_demangler_plugin_t RzDemanglerPlugin
RZ_API void rz_demangler_free(RZ_NULLABLE RzDemangler *demangler)
Frees the RzDemangler struct.
Definition: demangler.c:112
RZ_API bool rz_demangler_plugin_add(RZ_NONNULL RzDemangler *demangler, RZ_NONNULL RzDemanglerPlugin *plugin)
Adds a new demangler plugin to the plugin list.
Definition: demangler.c:144
#define RZ_NULLABLE
Definition: rz_types.h:65
#define RZ_OWN
Definition: rz_types.h:62
#define RZ_NONNULL
Definition: rz_types.h:64
#define RZ_BORROW
Definition: rz_types.h:63
const char * language
demangler language
Definition: rz_demangler.h:17
const char * author
demangler author
Definition: rz_demangler.h:18
const char * license
demangler license
Definition: rz_demangler.h:19
RzList * plugins
Definition: rz_demangler.h:24
#define bool
Definition: sysdefs.h:146
diff_output_t output
Definition: zipcmp.c:237