rizin/librz/bin/format/omf/omf.h

72 lines
1.8 KiB
C

// SPDX-FileCopyrightText: 2015 ampotos <mercie_i@epitech.eu>
// SPDX-FileCopyrightText: 2015-2019 pancake <pancake@nopcode.org>
// SPDX-License-Identifier: LGPL-3.0-only
#ifndef OMF_H_
#define OMF_H_
#include <rz_util.h>
#include <rz_types.h>
#include <rz_bin.h>
#include "omf_specs.h"
typedef struct OMF_record_handler {
OMF_record record;
struct OMF_record_handler *next;
} OMF_record_handler;
typedef struct {
ut32 nb_elem;
void *elems;
} OMF_multi_datas;
typedef struct OMF_DATA {
ut64 paddr; // offset in file
ut64 size;
ut32 offset;
ut16 seg_idx;
struct OMF_DATA *next;
} OMF_data;
// sections return by the plugin are the addr of datas because sections are
// separate on non contiguous block on the omf file
typedef struct {
ut32 name_idx;
ut64 size;
ut8 bits;
ut64 vaddr;
OMF_data *data;
} OMF_segment;
typedef struct {
char *name;
ut16 seg_idx;
ut32 offset;
} OMF_symbol;
typedef struct {
ut8 bits;
char **names;
ut32 nb_name;
OMF_segment **sections;
ut32 nb_section;
OMF_symbol **symbols;
ut32 nb_symbol;
OMF_record_handler *records;
} rz_bin_omf_obj;
// this value was chosen arbitrarily to made the loader work correctly
// if someone want to implement rellocation for omf he has to remove this
#define OMF_BASE_ADDR 0x1000
bool rz_bin_checksum_omf_ok(const ut8 *buf, ut64 buf_size);
rz_bin_omf_obj *rz_bin_internal_omf_load(const ut8 *buf, ut64 size);
void rz_bin_free_all_omf_obj(rz_bin_omf_obj *obj);
bool rz_bin_omf_get_entry(rz_bin_omf_obj *obj, RzBinAddr *addr);
int rz_bin_omf_get_bits(rz_bin_omf_obj *obj);
int rz_bin_omf_send_sections(RzPVector /*<RzBinSection *>*/ *vec, OMF_segment *section, rz_bin_omf_obj *obj);
ut64 rz_bin_omf_get_paddr_sym(rz_bin_omf_obj *obj, OMF_symbol *sym);
ut64 rz_bin_omf_get_vaddr_sym(rz_bin_omf_obj *obj, OMF_symbol *sym);
#endif