#include "getResource.h" #include "unaligned.h" #include <dlfcn.h> #include <string> #include <boost/algorithm/string/replace.hpp> 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<const char *>(sym_data), unalignedLoad<size_t>(&sym_size) }; return {}; }