라벨이 ndk인 게시물 표시

android setuid()

NDK를 이용해 setuid를 실행해보면 당연히 그냥은 안된다. 권한을 변경해주어야한다. http://en.wikipedia.org/wiki/Setuid 아래는 테스트 코드 int main(int argc,char *argv[]){ int id = 999; printf("hello world\n"); id = getuid(); printf("getuid(): %d , euid: %d \n",id, geteuid()); setuid(0); setgid(0); id=getuid(); printf("getuid() after setuid(): %d , euid: %d \n",id, geteuid()); return 0; } 위 코드를 NDK로 컴파일하고 디바이스에 넣고 실행해보자. 실행파일을 넣고 adb push hello /data/local/tmp 접속한다. adb shell 권한을 변경하고, 실행해보자 # cd /data/local/tmp # su # chmod 6755 hello # exit # ./hello hello world getuid(): 2000 , euid: 2000 getuid() after setuid(): 2000 , euid: 2000 # 안된다. 구글링 확인해보니 실행위치에도 관계가 있다. root권한으로 /system을 remount한다음 cat /data/local/tmp/hello > /system/xbin/hello 해서 복사한 다음 권한과 소유권을 변경하면 정상적으로 동작한다.

Android NDK

Android Native Development Kit Java에서 C나 C++로 만든 Native 코드를 호출하기 위한 방법 중 JNI ( Java Native Interface )라고 있다. 안드로이드에서는 Native 코드를 사용하기 위해 NDK를 제공한다. 일반적인 순서는 1. Java로 Android 코드 작성(호출하고자 하는 native 함수의 signature 작성) 2. 위 자바코드를 컴파일 3. 결과물로 나온 *.class 파일을 javah 를 이용해 header 파일 생성 4. 생성된 *.h 를 이용해 *.c 나 *.cpp 로 native 코드 작성. 5. Android.mk 작성 6. ndk 에 있는 ndk-build 를 실행 7. *.so 를 포함해서 패키징(*.apk) 8. 디바이스에 설치 및 실행 그럼, 이제 환경을 구성하자. 자바를 설치한다. 구글에서 Android SDK를 검색하면 첫번째 검색되는 링크를 클릭하여 SDK를 다운로드 한다. 다운로드한 파일을 적당한 곳에 푼다.(c: 드라이브 d: 드라이브 linux라면 /home 아래든) 여기선 c:아래 압축을 풀어놓는다. 구글에서 ndk를 검색하면 제일 처음 검색되는 구글 개발자 사이트에서 ndk를 받을수 있다. 여기서 자신의 플랫폼에 맞는 kit을 다운받아야 한다. 적당한 곳에 압축을 푼다.(마찬가지로 c:에 압축을 해제) 이제 컴파일러가 필요하다. 대부분 linux를 사용하는 user는 gcc를 설치했으리라 생각한다. 윈도우에서는 cygwin 설치를 추천한다. cygwin을 다운로드하고 develop 부분을 그냥 다 설치한다.(귀차니즘) 환경변수에서 NDK홈을 지정해준다. 보통 윈도우에서는 시스템-고급 시스템 설정(시스템 속성)-환경변수 에서 설정한다. NDK=c:\android-ndk-r8e cygwin 을 실행하여 프롬프트에서 echo $NDK 또는 $NDK/ndk-build  해서 잘 설정 되었...