Solution: `GLIBC_2.xxx' not found”

来源:互联网 发布:UC浏览器mini java版 编辑:程序博客网 时间:2024/06/10 16:03

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#orobjdump -T app |grep GLIBC_2.xx#orreadelf -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

0 0
原创粉丝点击