과 함께 오류가 발생합니다. 다음 코드로 SO 파일을 동적으로로드하려고합니다. SO 파일은 x86 라이브러리가 포함 된 apk (이 파일은 모노 C# dll로 압축 된 파일)에서 추출되었습니다.dlopen을 사용하여 x86 android .so 파일을 동적으로로드합니다. 정의되지 않은 심볼
Cannot Load Library. Error: /usr/lib/i386-linux-gnu/libc.so
이것은 링커 스크립트 인 내 libc.so 파일에 기인하고 실제 SO 파일로 읽을 시도 : 내 프로그램을 실행할 때
void * mono = dlopen("./libmonodroid_bundle_app.so", RTLD_LAZY);
if(!mono){
cerr << "Cannot Load Library. Error: " << dlerror() << '\n';
return -1;
}
내가 먼저 다음과 같은 오류가 발생했습니다 .
수동으로 libc.so를 복사하는 경우 : sudo cp /lib/i386-linux-gnu/ld-linux.so.2 libc.so 작동합니다. .
Cannot Load Library Error: /libmonodroid_bundle.app.so undefined symbol: __sF
: I는 또한
지금 그렇게하면 libstdC++ 마침내 dlopen을 호출 할 때 나는 다음과 같은 오류가 모든 라이브러리를 가지고, 내가 한 어떤 liblog.so의 86 버전을 찾아야했다 정의되지 않은 기호입니까? IDA를 통해 .so 파일을 제거하기 위해 .so 파일을 편집 할 수는 있지만 제대로 작동하지 않을 것으로 생각됩니다.
내가 그 도움이된다면 아래의 전화를 시도하고있는 .so를 파일의LDD 출력 :
ldd -r -v libmonodroid_bundle_app.so
linux-gate.so.1 => (0xb77fd000)
libc.so => /usr/lib/i386-linux-gnu/libc.so (0xb6de2000)
libm.so => /usr/lib/i386-linux-gnu/libm.so (0xb6d8c000)
libdl.so => /usr/lib/i386-linux-gnu/libdl.so (0xb6d85000)
liblog.so => /usr/lib/i386-linux-gnu/liblog.so (0xb6d83000)
libz.so => /usr/lib/i386-linux-gnu/libz.so (0xb6d66000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6bac000)
/lib/ld-linux.so.2 (0x80009000)
undefined symbol: __sF (./libmonodroid_bundle_app.so)
Version information:
/usr/lib/i386-linux-gnu/libm.so:
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib/i386-linux-gnu/libc.so.6
/usr/lib/i386-linux-gnu/libdl.so:
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
libc.so.6 (GLIBC_PRIVATE) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/usr/lib/i386-linux-gnu/libz.so:
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/libc.so.6:
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
편집 : 아무것도 가리 키지 않는 여기 IDA에서 통근 테이블과 그 __sF를 볼 수있는 이상하다.
감사합니다. 파일을 디 컴파일하고 다른 방법으로 파일 압축을 풀었습니다. – rolls