diff --git a/src/elf_link_common.h b/src/elf_link_common.h index b9f63bde86ec043345f226d3b4949dc1ddf20cc9..0d6047148e3f47e7bd12f8dcc725196e83052e69 100644 --- a/src/elf_link_common.h +++ b/src/elf_link_common.h @@ -241,45 +241,6 @@ static inline bool is_need_preinit(elf_link_t *elf_link) return false; } -static inline int elf_read_s32(elf_file_t *ef, unsigned long offset) -{ - void *addr = ((void *)ef->hdr + (unsigned long)offset); - return *(int *)addr; -} - -static inline int elf_read_s32_va(elf_file_t *ef, unsigned long va) -{ - return elf_read_s32(ef, elf_va_to_offset(ef, va)); -} - -static inline unsigned elf_read_u32(elf_file_t *ef, unsigned long offset) -{ - void *addr = ((void *)ef->hdr + (unsigned long)offset); - return *(unsigned *)addr; -} - -static inline unsigned elf_read_u32_va(elf_file_t *ef, unsigned long va) -{ - return elf_read_u32(ef, elf_va_to_offset(ef, va)); -} - -static inline unsigned long elf_read_u64(elf_file_t *ef, unsigned long offset) -{ - void *addr = ((void *)ef->hdr + (unsigned long)offset); - return *(unsigned long *)addr; -} - -static inline unsigned elf_read_u64_va(elf_file_t *ef, unsigned long va) -{ - return elf_read_u64(ef, elf_va_to_offset(ef, va)); -} - -static inline void elf_write_u64(elf_file_t *ef, unsigned long addr_, unsigned long value) -{ - unsigned long *addr = ((void *)ef->hdr + (unsigned long)addr_); - *addr = value; -} - static inline void elf_write_u32(elf_file_t *ef, unsigned long addr_, unsigned value) { unsigned *addr = ((void *)ef->hdr + (unsigned long)addr_); @@ -304,7 +265,6 @@ static inline void modify_elf_file(elf_link_t *elf_link, unsigned long loc, void memcpy(dst, val, len); } - // symbol bool is_symbol_maybe_undefined(const char *name); bool is_gnu_weak_symbol(Elf64_Sym *sym); diff --git a/src/elf_read_elf.h b/src/elf_read_elf.h index fb527061e45cf694afbe0cc61e737b5ec3b0692e..bfd4af50eadc356f02e492b6a5e1904ed26c417c 100644 --- a/src/elf_read_elf.h +++ b/src/elf_read_elf.h @@ -166,6 +166,46 @@ static inline Elf64_Sym *elf_get_dynsym_by_rela(elf_file_t *ef, Elf64_Rela *rela } unsigned long elf_va_to_offset(elf_file_t *ef, unsigned long va); + +static inline int elf_read_s32(elf_file_t *ef, unsigned long offset) +{ + void *addr = ((void *)ef->hdr + (unsigned long)offset); + return *(int *)addr; +} + +static inline int elf_read_s32_va(elf_file_t *ef, unsigned long va) +{ + return elf_read_s32(ef, elf_va_to_offset(ef, va)); +} + +static inline unsigned elf_read_u32(elf_file_t *ef, unsigned long offset) +{ + void *addr = ((void *)ef->hdr + (unsigned long)offset); + return *(unsigned *)addr; +} + +static inline unsigned elf_read_u32_va(elf_file_t *ef, unsigned long va) +{ + return elf_read_u32(ef, elf_va_to_offset(ef, va)); +} + +static inline unsigned long elf_read_u64(elf_file_t *ef, unsigned long offset) +{ + void *addr = ((void *)ef->hdr + (unsigned long)offset); + return *(unsigned long *)addr; +} + +static inline unsigned long elf_read_u64_va(elf_file_t *ef, unsigned long va) +{ + return elf_read_u64(ef, elf_va_to_offset(ef, va)); +} + +static inline void elf_write_u64(elf_file_t *ef, unsigned long addr_, unsigned long value) +{ + unsigned long *addr = ((void *)ef->hdr + (unsigned long)addr_); + *addr = value; +} + int elf_find_func_range_by_name(elf_file_t *ef, const char *func_name, unsigned long *start, unsigned long *end);