14 rz_list_foreach (
maps, it,
map) {
36 RzBinRelocTargetBuilder *builder =
RZ_NEW(RzBinRelocTargetBuilder);
40 builder->target_size = target_size;
41 builder->next_target = target_base;
42 HtUUOptions opt = { 0 };
43 builder->targets_by_sym = ht_uu_new_opt(&opt);
44 if (!builder->targets_by_sym) {
55 ht_uu_free(builder->targets_by_sym);
71 ut64 r = ht_uu_find(builder->targets_by_sym, sym, &
found);
75 r = builder->next_target;
76 ht_uu_insert(builder->targets_by_sym, sym,
r);
77 builder->next_target += builder->target_size;
88 ut64 target_vfile_base,
ut64 target_vfile_size,
96 rz_list_foreach (
maps, it,
map) {
97 if (
map->vfile_name) {
102 ut64 buf_addr =
map->paddr - buf_patched_offset;
107 map->vfile_name =
strdup(vfile_name_patched);
108 map->paddr = buf_addr;
112 if (target_vfile_size) {
120 map->psize = target_vfile_size;
121 map->vaddr = target_vfile_base;
122 map->vsize = target_vfile_size;
124 map->vfile_name =
strdup(vfile_name_reloc_targets);
static RzList * maps(RzBinFile *bf)
size_t map(int syms, int left, int len)
RZ_API void Ht_() free(HtName_(Ht) *ht)
RZ_API const KEY_TYPE bool * found
RZ_API RZ_BORROW RzListIter * rz_list_prepend(RZ_NONNULL RzList *list, void *data)
Appends at the beginning of the list a new element.
return strdup("=SP r13\n" "=LR r14\n" "=PC r15\n" "=A0 r0\n" "=A1 r1\n" "=A2 r2\n" "=A3 r3\n" "=ZF zf\n" "=SF nf\n" "=OF vf\n" "=CF cf\n" "=SN or0\n" "gpr lr .32 56 0\n" "gpr pc .32 60 0\n" "gpr cpsr .32 64 0 ____tfiae_________________qvczn\n" "gpr or0 .32 68 0\n" "gpr tf .1 64.5 0 thumb\n" "gpr ef .1 64.9 0 endian\n" "gpr jf .1 64.24 0 java\n" "gpr qf .1 64.27 0 sticky_overflow\n" "gpr vf .1 64.28 0 overflow\n" "gpr cf .1 64.29 0 carry\n" "gpr zf .1 64.30 0 zero\n" "gpr nf .1 64.31 0 negative\n" "gpr itc .4 64.10 0 if_then_count\n" "gpr gef .4 64.16 0 great_or_equal\n" "gpr r0 .32 0 0\n" "gpr r1 .32 4 0\n" "gpr r2 .32 8 0\n" "gpr r3 .32 12 0\n" "gpr r4 .32 16 0\n" "gpr r5 .32 20 0\n" "gpr r6 .32 24 0\n" "gpr r7 .32 28 0\n" "gpr r8 .32 32 0\n" "gpr r9 .32 36 0\n" "gpr r10 .32 40 0\n" "gpr r11 .32 44 0\n" "gpr r12 .32 48 0\n" "gpr r13 .32 52 0\n" "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n")
RZ_API ut64 rz_bin_reloc_target_builder_get_target(RzBinRelocTargetBuilder *builder, ut64 sym)
obtain the address of the target for a given symbol
RZ_API void rz_bin_reloc_target_builder_free(RzBinRelocTargetBuilder *builder)
RZ_API void rz_bin_relocs_patch_maps(RZ_NONNULL RzList *maps, RZ_NULLABLE RzBuffer *buf_patched, ut64 buf_patched_offset, ut64 target_vfile_base, ut64 target_vfile_size, RZ_NONNULL const char *vfile_name_patched, RZ_NONNULL const char *vfile_name_reloc_targets)
Change file-mapped maps to the patched vfile if covered by the buffer and add the reloc target map.
RZ_API RzBinRelocTargetBuilder * rz_bin_reloc_target_builder_new(ut64 target_size, ut64 target_base)
RZ_API ut64 rz_bin_relocs_patch_find_targets_map_base(RzList *maps, ut64 target_sz)
Finm a suitable location for putting the artificial reloc targets map.
#define rz_return_if_fail(expr)
RZ_API bool rz_buf_sparse_populated_in(RzBuffer *b, ut64 from, ut64 to)
static ut64 rz_num_align_delta(ut64 v, ut64 alignment)
Padding to align v to the next alignment-boundary.
Description of a single memory mapping into virtual memory from a binary.
HtUU * targets_by_sym
to create only a single target per symbol, if there are more relocs for a single symbol
ut64 target_size
size per target
ut64(WINAPI *w32_GetEnabledXStateFeatures)()