diff --git a/README.md b/README.md index 8653a30..451351e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # CTRDL -This library provides an implementation of common `dl*` APIs along with custom additions, which can be used for loading and executing ELF files on the Nintendo 3DS. +Implementation of common `dl*` APIs, along with custom additions, which can be used for loading and executing ELF files on the Nintendo 3DS. -## How-to +## Build Download a [prebuilt](https://github.com/kynex7510/CTRDL/releases) version, use as a CMake dependency, or build manually: @@ -12,7 +12,12 @@ cmake --build Build --config Release cmake --install Build --prefix Build/Release ``` +## Symbol resolution + +Since all homebrew is statically linked by default, there's no way for a program to expose symbols to shared objects. This behaviour can be simulated by redeclaring `ctrdlProgramResolver`, which is called internally whenever a symbol has to be looked up in the program, or its dependencies. By default `ctrdlProgramResolver` returns `NULL`. + +Additionally, a custom resolver can be passed to the extensions `ctrdlOpen`, `ctrdlFOpen`, `ctrdlMap`, which will be used at the relocation step, and which always precedes other lookup mechanisms (`dlsym` is not affected). + ## Limitations -- `RTLD_LAZY`, `RTLD_DEEPBIND`, and `RTLD_NODELETE` are not supported. -- `NULL` pseudo path for main process is not supported. \ No newline at end of file +- `RTLD_LAZY`, `RTLD_DEEPBIND`, and `RTLD_NODELETE` are not supported. \ No newline at end of file