Wednesday, February 18, 2015

Android Studio undefined reference to __android_log_print 발생시 해결 방법

Eclipse NDK 프로젝트를 Android Studio에 import 하였을때 발생하는 에러로서 Android.mk에 링크가 다음과 같이 정의가 되어 있음에도 불구하고 undefined reference to __android_log_print가 발생했다.

Android.mk
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2

이런 에러가 발생할때는 다음과 같이 build.gradle을 열어서 ndk에 다음과 같이 ldLibs를 추가해 주어야 한다. Android Studio에서 import시 ldLibs를 추가해 주지 않기 때문이다.

ndk {
            moduleName "mediaweb"
            ldLibs "log", "android", "EGL", "GLESv2"
        }

Wednesday, February 4, 2015

Android Linux API Hooking

안드로이드에서도 Linux API를 다음과 같이 Hooking할 수 있다. 다른 점은 RTLD_NEXT대신에 RTLD_DEFAULT를 써야 한다는 점이고, 대상 so와 함께 link되어 컴파일 되어야 한다는 점이다.


#define _GNU_SOURCE
#define __USE_GNU

#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))

void* malloc(size_t size) {
LOGI("malloc");
static void* (*my_malloc)(size_t) = NULL;
my_malloc = dlsym(RTLD_DEFAULT, "malloc");
LOGI("my_malloc=%d",(int)my_malloc);
return my_malloc(size);
}

넥서스5 USB 드라이버 다운로드

다운로드