您的位置:首页 > 其它

Solution: `GLIBC_2.xxx' not found”

2015-06-27 01:58 477 查看

Bypass:

Using the temp environment variable:

env LD_LIBRARY_PATH=/path/to/correct/libc-xxx.so  SomeProblemAPP appArgs


or

LD_LIBRARY_PATH=/path/to/correct/libc-xxx.so  SomeProblemAPP appArgs


Find which function cause the problem:

Check Glibc version:

objdump -p app


Find Glibc function:

nm app |grep GLIBC_2.xx
#or
objdump -T app |grep GLIBC_2.xx
#or
readelf -s app |grep GLIBC_2.xx


Linking to Older Versioned Symbols (glibc)

Using the version script feature of ld :

Suppose the odd function is realpath, then add below line into the source file:

__asm__(".symver realpath,realpath@GLIBC_2.2.5");


so the source file will look like:

#include <limits.h>
#include <stdlib.h>
#include <stdio.h>

__asm__(".symver realpath,realpath@GLIBC_2.2.5");
int main()
{
char* unresolved = "/lib64";
char  resolved[PATH_MAX+1];

if(!realpath(unresolved, resolved))
{ return 1; }

printf("%s\n", resolved);

return 0;
}


ref:

http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_25.html

http://www.trevorpounds.com/blog/?tag=symbol-versioning

http://www.trevorpounds.com/blog/?p=103
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: