#ifndef __SCC_PE_RELOC_H__ #define __SCC_PE_RELOC_H__ #include "scc_pe_def.h" typedef struct { u32 offset; ///< 相对代码段的偏移地址 i32 addend; ///< 可选的偏移量的附加值 可选默认为0 u8 size; ///< 引用的地址的大小 const char *library_name; ///< 库名称 eg. "Kernel32.dll" const char *symbol_name; ///< 导入dll的符号名称 eg. "CreateFileW" u16 ordinal; ///< 符号的序号 eg. 可选 } scc_pe_extern_t; typedef SCC_VEC(scc_pe_extern_t) scc_pe_extern_vec_t; typedef struct { scc_pe_extern_vec_t externs; scc_hashtable_t externs_set; } scc_pe_reloc_builder_t; void scc_pe_reloc_builder_init(scc_pe_reloc_builder_t *builder); // void scc_pe_reloc_add_item(scc_pe_reloc_builder_t *builder, ); /** * @brief * @warning * * @param builder * @return u32 */ u32 scc_pe_reserve_reloc(scc_pe_reloc_builder_t *builder); /** * @brief * @warning * * @param builder * @param reloc_range */ scc_pe_buffer_t scc_pe_construct_reloc(scc_pe_reloc_builder_t *builder, scc_pe_section_range *reloc_range); #endif /* __SCC_PE_RELOC_H__ */