From fff86dcc8d6e27cbbc9874b9a434a50bd2b93bac Mon Sep 17 00:00:00 2001 From: liankong Date: Sun, 30 Mar 2025 21:06:56 +0800 Subject: [PATCH] 4 --- kernel/kpm/kpm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/kpm/kpm.c b/kernel/kpm/kpm.c index 649c8db7..b7876796 100644 --- a/kernel/kpm/kpm.c +++ b/kernel/kpm/kpm.c @@ -425,7 +425,7 @@ static int kpm_simplify_symbols(struct kpm_module *mod, const struct kpm_load_in sym[i].st_value = addr; break; default: - secbase = info->sechdrs[sym[i].st_shndx].sh_addr; + secbase = (unsigned long)mod->start + info->sechdrs[sym[i].st_shndx].sh_offset; sym[i].st_value += secbase; break; } @@ -895,7 +895,7 @@ static int kpm_move_module(struct kpm_module *mod, struct kpm_load_info *info) Elf_Shdr *shdr = &info->sechdrs[i]; if (!(shdr->sh_flags & SHF_ALLOC)) continue; - dest = mod->start + shdr->sh_entsize; + dest = mod->start + (shdr->sh_addr - info->ehdr->e_entry); sname = info->secstrings + shdr->sh_name; if (shdr->sh_type != SHT_NOBITS) memcpy(dest, (void *)shdr->sh_addr, shdr->sh_size);