1
billccn 2020-07-25 03:46:50 +08:00
你这个信息太少,至少把你调用的代码和命令行放出来。尝试用`ld`把你这个库静态连进你调用代码它报什么错呢?
|
2
ciaoly 2020-07-25 09:10:46 +08:00 via Android
可能是这个安卓的动态链接库又依赖了其它库吧。
|
3
Deffi 2020-07-25 09:23:31 +08:00
要看 so 库内部有没有做运行环境检测,比如只支持自家 App 内调用。还有 so 也是分 CPU 架构的
|
4
wcavell 2020-07-25 11:49:26 +08:00 via iPhone
你可以试一下 unidbg
|
5
BoarBoar OP @billccn 调用代码是这样的
char* ttEncrypt(char* bArr, int i) { void* handle; typedef char* (*FPTR)(char*,int); handle = dlopen("./libEncryptor.so", RTLD_LAZY); if (handle == NULL) fprintf(stderr,"Error:failed to load libary.\n"); char *error = dlerror(); if (error != NULL) { fprintf(stderr,"%s\n",error); //return; } FPTR fptr = (FPTR)dlsym(handle, "ttEncrypt"); char* result = (*fptr)(bArr,i); return result; } |
6
BoarBoar OP 发不了太长的回复见谅
编译指令一开始 go 用的 CGO_ENABLED=1 GOOS=linux GOARCH=arm CC=arm-linux-gnueabi-gcc go build,指定 LDFLAGS: -ldl 。后来用 c 就是 arm-linux-gnueabi-gcc -o load load.c -ldl 。 我之前没接触过相关,编译指令都是 gg 来的 |
7
BoarBoar OP |
9
BoarBoar OP 多谢各位回复,搞定了。
c 的交叉编译对于无经验者来说坑实在太多了,最后还是用了 unidbg 这个开源包,用 java 单独写了个服务 |