From 470aaa29dc1f69d9a5453cff7fa5ce498d46da45 Mon Sep 17 00:00:00 2001 From: liankong Date: Sun, 30 Mar 2025 17:21:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/kpm/compact.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/kernel/kpm/compact.c b/kernel/kpm/compact.c index 187be99d..81f5e347 100644 --- a/kernel/kpm/compact.c +++ b/kernel/kpm/compact.c @@ -49,7 +49,7 @@ struct CompactProxySymbol { void* cached_address; }; -struct CompactAddressSymbol address_symbol [] = { +static struct CompactAddressSymbol address_symbol [] = { { "kallsyms_lookup_name", &kallsyms_lookup_name }, { "compact_find_symbol", &sukisu_compact_find_symbol }, { "compat_copy_to_user", ©_to_user }, @@ -58,21 +58,21 @@ struct CompactAddressSymbol address_symbol [] = { { "is_run_in_sukisu_ultra", (void*)1 } }; -struct CompactAliasSymbol alias_symbol[] = { +static struct CompactAliasSymbol alias_symbol[] = { {"compat_copy_to_user", "__arch_copy_to_user"} }; -struct CompactProxySymbol proxy_symbol[] = { +static struct CompactProxySymbol proxy_symbol[] = { {"kf_strncat", "strncat", NULL }, {"kf_strlen", "strlen", NULL }, {"kf_strcpy", "strcpy", NULL }, }; static unsigned long sukisu_find_proxy_symbol(const char* name) { - // 查不到就查查兼容的符号 + // 查找proxy符号 int i; for(i = 0; i < (sizeof(proxy_symbol) / sizeof(struct CompactProxySymbol)); i++) { - struct CompactProxySymbol* symbol = &alias_symbol[i]; + struct CompactProxySymbol* symbol = &proxy_symbol[i]; if(strcmp(name, symbol->symbol_name) == 0) { if(symbol->cached_address == NULL) { symbol->cached_address = (void*) kallsyms_lookup_name(name); @@ -88,6 +88,7 @@ static unsigned long sukisu_find_proxy_symbol(const char* name) { unsigned long sukisu_compact_find_symbol(const char* name) { int i; unsigned long addr; + char isFoundedProxy = 0; // 先自己在地址表部分查出来 for(i = 0; i < (sizeof(address_symbol) / sizeof(struct CompactAddressSymbol)); i++) { @@ -100,6 +101,7 @@ unsigned long sukisu_compact_find_symbol(const char* name) { /* 如果符号名以 "kf__" 开头,尝试解析去掉前缀的部分 */ if (strncmp(name, "kf__", 4) == 0) { addr = sukisu_find_proxy_symbol(name); + isFoundedProxy = 1; if(addr != 0) { return addr; } @@ -121,5 +123,9 @@ unsigned long sukisu_compact_find_symbol(const char* name) { } } + if(!isFoundedProxy) { + return sukisu_find_proxy_symbol(name); + } + return 0; } \ No newline at end of file