2012-09-19 3 views
13

Android 4.1 (Jelly Bean)에서 원시 ARM 실행 파일을 실행할 수있는 메소드를 찾고 있습니다. 예를 들어, 고전 C 프로그램 ARMv7a 실행에Jelly Bean에서 원시 ARM 실행 파일 실행

// hello.c 
#include <stdio.h> 
int main() { 
    printf("Hello world"); 
} 

를 컴파일, 안드로이드 NDK를 사용하여 hello 말을하고 안드로이드 쉘에서 실행합니다. 나는 방법 등이

adb shell chmod 755 /data/local/hello 

에 의해 실행되는 것을 허용하고 사용 쉘에서 그들을 호출 할

adb push hello /data/local 

변경 허가에 의해 /data/local에 실행 파일을 밀어으로 웹에 제안 시도

/data/local/hello: not found 
:
adb shell /data/local/hello 

의 마지막 단계는 오류와 함께 실패

하지만 분명히 파일이 있습니다. 문제는 젤리 빈의 쉘이 실행을 허용하지 않는다는 것입니다. 외계인 바이너리가 더 이상 존재하지 않습니다. 누구든지 이것을 확인하고 해결책을 줄 수 있습니까?

+3

이것은 내가 볼 수있는 것처럼 가까운 Android 관련 질문을위한 프로그래밍이 아닙니다. 나는 이것이 안드로이드 사용자에게 하드 코어 관심이 될 것이라고 생각합니다. – ale

+0

@Chahk 감사합니다. 그러나 나는 그것이 원래의 질문에 대한 대답이라고 생각하지 않는다. 궁극적으로, 나는 'dd'와 같은 프로그램을 크로스 컴파일하거나 ARM 미리 빌드 된 버전을 사용하여 실행하고 싶습니다. 이제는 시스템에 새로운 바이너리를 설치하는 'busybox'와 'kbox'를 회상합니다. 그래서 여기서 보안 문제는 없다고 생각합니다. 나는 그들이 그 일을 어떻게하는지 보도록 그 일을 조사 할 것이다. –

+3

@Chahk - 스택 오버플로 문제는 2011 년 10 월부터 있었고, 이에 따라 안드로이드의 구 버전에 대한 답변을 얻었습니다. Jelly Bean *에 대한 대답은 다를 수 있습니다. 질문자는 실제로 누군가가 Android가 아닌지를 확인하기를 원합니다. 이는 Android에 대한 실용적인 대답입니다. –

답변

6

Android에서 원시 ARM 바이너리를 실행하려면 -static으로 컴파일해야합니다.

(표준 ARM 툴체인이 아닌 안드로이드 NDK를 사용하는 경우) 이진 대상에과 libc 에 동적으로 연결하고자 할 때 안드로이드의 때문에 (생체 공학)와 libc의 다른 구축하는 데 사용하는 libc의 libc이 (가) 대상에 존재하지 않으므로 표시되지 않습니다. 당신이 빌드시에 libc의 에서 필요한 링크를 동적으로 사물을 연결에 대해 걱정할 필요가 없습니다 -static 옵션을

.

0

adb push가 "Permission denied"오류를 덤프하지 않는지 확인하십시오. 검사 파일의 존재 여부 : adb shell ls/data/local

4.0.4로 업데이트되었으므로/data/local은/data/local/tmp에 액세스 할 수 없으므로 "Not found" "오류.

+0

Google의 NDK 독립 실행 형 툴체인을 설치하고 소스 코드를 다시 컴파일하여 문제를 해결합니다. 후드 아래에서 툴 체인이하는 신비한 일이 있어야합니다. –

관련 문제