#include "getResource.h" #include "unaligned.h" #include #include #include std::string_view getResource(std::string_view name) { std::string name_replaced(name); std::replace(name_replaced.begin(), name_replaced.end(), '/', '_'); std::replace(name_replaced.begin(), name_replaced.end(), '-', '_'); std::replace(name_replaced.begin(), name_replaced.end(), '.', '_'); boost::replace_all(name_replaced, "+", "_PLUS_"); /// These are the names that are generated by "ld -r -b binary" std::string symbol_name_data = "_binary_" + name_replaced + "_start"; std::string symbol_name_size = "_binary_" + name_replaced + "_size"; const void * sym_data = dlsym(RTLD_DEFAULT, symbol_name_data.c_str()); const void * sym_size = dlsym(RTLD_DEFAULT, symbol_name_size.c_str()); if (sym_data && sym_size) return { static_cast(sym_data), unalignedLoad(&sym_size) }; return {}; }