Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
build*/
.cache/
.vscode/
debug_demangler
debug_demangler.c
debug_demangler.dSYM/
Expand Down
40 changes: 25 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,52 @@

This library contains all rizin demanglers and is linked statically in rizin to provide demangling support in rizin

## Run tests with asan
## Clone Repository

```
meson -Dbuildtype=debugoptimized -Db_sanitize=address,undefined build
ninja -C build test
git clone https://github.com/rizinorg/rz-libdemangle
```

## Build and install cli tool

This cli tool does not require rizin.

### Install

```
meson --prefix=/usr -Denable_cli=true build
ninja -C build install
meson setup build --prefix=/usr -Denable_cli=true
meson compile -C build
sudo meson install -C build
```


### Usage

```
demangle -s pascal 'OUTPUT_$$_init'
rz-demangle -s pascal 'OUTPUT_$$_init'
```

## Install library in prefix path

## Install Library

To install the library into the system prefix:


```
meson --prefix=/usr -Dinstall_lib=true build
ninja -C build install
meson setup build --prefix=/usr -Dinstall_lib=true
meson compile -C build
sudo meson install -C build
```

## Demangler

## Building
## Development

### Debug Build with Sanitizers

```
meson setup build -Dbuildtype=debugoptimized -Db_sanitize=address,undefined
```

### Run Tests

```
meson -Dbuildtype=debugoptimized -Db_sanitize=address,undefined build
ninja -C build test
meson test -C build
```
3 changes: 2 additions & 1 deletion bin/demangle.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#define SWIFT ""
#endif

#define LANGUAGES "java, msvc, objc, " SWIFT "pascal, rust, " CPP
#define LANGUAGES "java, msvc, objc, d " SWIFT "pascal, rust, " CPP

typedef char *(*handler_t)(const char *symbol, RzDemangleOpts opts);

Expand All @@ -32,6 +32,7 @@ static language_t languages[] = {
{ .name = "msvc", .demangle = libdemangle_handler_msvc },
{ .name = "objc", .demangle = libdemangle_handler_objc },
{ .name = "pascal", .demangle = libdemangle_handler_pascal },
{ .name = "d", .demangle = libdemangle_handler_d },
};

static void usage(const char *prog) {
Expand Down
1 change: 1 addition & 0 deletions include/rz_libdemangle.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ DEM_LIB_EXPORT char *libdemangle_handler_java(const char *symbol, RzDemangleOpts
DEM_LIB_EXPORT char *libdemangle_handler_msvc(const char *symbol, RzDemangleOpts opts);
DEM_LIB_EXPORT char *libdemangle_handler_objc(const char *symbol, RzDemangleOpts opts);
DEM_LIB_EXPORT char *libdemangle_handler_pascal(const char *symbol, RzDemangleOpts opts);
DEM_LIB_EXPORT char *libdemangle_handler_d(const char *mangled, RzDemangleOpts opts);

#ifdef __cplusplus
}
Expand Down
5 changes: 4 additions & 1 deletion meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ libdemangle_src = [
'src' / 'rust' / 'rust.c',
'src' / 'rust' / 'rust_legacy.c',
'src' / 'rust' / 'rust_v0.c',

'src' / 'd' / 'dmd.c',
]

tests = [
Expand All @@ -37,7 +39,8 @@ tests = [
'objc',
'pascal',
'rust',

'd',

'subs', # Substitution table tests

# C++ demangling tests (organized by category)
Expand Down
Loading