-
Notifications
You must be signed in to change notification settings - Fork 157
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
模块加载失败unknown symbol: memset #144
Comments
你自己编译器优化的问题 |
[ 7939.904376] [-] KP E unknown symbol: fp_wrap_syscalln |
我今天也遇到了这个问题,编译器优化会自动插入memcpy调用,无论你如何手动避免它。不幸的是我的内核符号表里memcpy的标识是W,并且我尝试使用编译选项禁用内置函数修改Makefile,为gcc添加-fno-builtin-memcpy选项但是仍然:
于是我最后决定直接在模块中提供memcpy的实现,幸运的是,最后成功了。 |
我的似乎是数组初始化的问题,换个方式就好了 |
请问你是怎么build的? 我用的是arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf.tar, 然后make |
我也差不多, |
我看到了你的问题,具体的函数符号找不到可以这样:
导出内核符号表,查询你用到的函数是否标识为T或者t,这样标识的函数可以使用kallsyms_lookup_name寻址并使用。 |
我那几个符号都是 kernelpatch里面一个syscall.h里面的方法,不是内核导出符号。不知道是不是跟系统syscall.h重名了导致找不到符号,不是 |
内核日志:
[26821.176645] [+] KP D load_module_path: /data/local/tmp/mod_main.kpm
[26821.176674] [+] KP D load_module_path: module size: 8668
[26821.176714] [+] KP D loading module:
[26821.176714] [+] KP D name: IO Redirect
[26821.176715] [+] KP D version: 1.0.0
[26821.176716] [+] KP D license: (null)
[26821.176716] [+] KP D author: yuuki
[26821.176717] [+] KP D description: Prevent your phone from being maliciously formatted
[26821.176730] [+] KP I alloc module size: 3935
[26821.176735] [+] KP D final section addresses:
[26821.176735] [+] KP D .text ffffffe4ec1c3130 5e4
[26821.176736] [+] KP D .rodata.str1.8 ffffffe4ec1c4130 325
[26821.176737] [+] KP D .kpm.info ffffffe4ec1c4455 6c
[26821.176738] [+] KP D .data ffffffe4ec1c5130 10
[26821.176738] [+] KP D .kpm.ctl0 ffffffe4ec1c5140 8
[26821.176739] [+] KP D .kpm.exit ffffffe4ec1c5148 8
[26821.176739] [+] KP D .kpm.init ffffffe4ec1c5150 8
[26821.176740] [+] KP D .bss ffffffe4ec1c5158 50
[26821.176740] [+] KP D .symtab ffffffe4ec1c6130 648
[26821.176741] [+] KP D .strtab ffffffe4ec1c6896 1cf
[26821.176743] [-] KP E unknown symbol: memset
代码:
#include "data_parse.h"
char *my_strdup(const char *src) {
if (src == NULL) {
return NULL;
}
}
char *my_strtok(char *str, const char *delim) {
static char *saved_str = NULL;
char *start = NULL;
char *end = NULL;
}
void parsePaths(const char *input, char source_path[][PATH_MAX], char redirect_path[][PATH_MAX], int *line_count) {
char *temp = my_strdup(input);
char *line = my_strtok(temp, "\n");
*line_count = 0;
}
//static long mod_control0(const char *args, char *__user out_msg, int outlen) {
pr_info("[yuuki] kpm hello control0, args: %s\n", args);
}
我都没有使用到memset这个函数,但是加载失败提示unknown symbol: memset
我尝试使用void *(*kf_memset)(void *s, int c, size_t count) = NULL;
kf_memset = (typeof(kf_memset))kallsyms_lookup_name("memset");依然会报这个错误,请问大佬们这个问题如何解决
The text was updated successfully, but these errors were encountered: