fanday / esp32-elfloader

esp32 component to load in ram and relocate elf file

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

elfloader module for esp32

This esp32 component is able to load and relocate elf module.

ELF creation

See moduleexample and payloadexamples folders for some examples.

The code must be compiled with -fno-common option and linked with -Wl,-r -nostartfiles -nodefaultlibs -nostdlib options

Usage

Example:

#include "loader.h"


char* data = ... Elf module ...

static const ELFLoaderSymbol_t exports[] = {
    { "puts", (void*) puts },
    { "memcpy", (void*) memcpy },
    { "memmove", (void*) memmove },
    { "strcmp", (void*) strcmp },
    { "strtol", (void*) strtol },
    ...
};
static const ELFLoaderEnv_t env = { exports, sizeof(exports) / sizeof(*exports) };


ELFLoaderContext_t* ctx = elfLoaderInitLoadAndRelocate(data, &env);
if (!ctx) {
    ESP_LOGI(TAG, "elfLoaderInitLoadAndRelocate error");
    return -1;
}
if (elfLoaderSetFunc(ctx, "local_main") != 0) {
    ESP_LOGI(TAG, "elfLoaderSetFunc error: local_main function not fount");
    elfLoaderFree(ctx);
    return -1;
}
ESP_LOGI(TAG, "Running local_main(0x10) function as int local_main(int arg)");
int r = elfLoaderRun(ctx, 0x10);
ESP_LOGI(TAG, "Result: %i", r);
elfLoaderFree(ctx);
return 0;

About

esp32 component to load in ram and relocate elf file

License:GNU General Public License v2.0


Languages

Language:C 98.2%Language:Makefile 1.7%Language:Shell 0.1%