2014-11-03 1 views
1

제목에서 알 수 있듯이, 나는 LiME (Linux Memory Extractor)를 성공적으로 컴파일하고 Android 에뮬레이터 또는 물리적 장치에로드하는 데 어려움을 겪고 있습니다. 컴파일하려면 arm-linux-androideabi-4.6을 사용하고 현재 x64 14.04 우분투를 사용 중입니다. 또한 :Android 커널을 컴파일하는 문제 + LiME를 사용한 크로스 컴파일

[email protected]:~$ uname -a 
Linux unknown-A15 3.13.0-39-generiC#66-Ubuntu SMP Tue Oct 28 13:30:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 

그래서,이 성공하기 위해 나는 온라인 운없이 .. (이 때문에 사랑하는 NDK/SDK/유니스 배포판의 versios 또는 그냥 내 경험 부족에 될 수 있다고 관한 모든 가이드의 지시를 따랐다) 내가 읽은 가이드) 필요한 경우 나중에에 대한 코멘트에서 그들을 게시 할 수 있습니다 .. 그 (플러스 2 개 가이드이지만 SO 좀 더 링크를 게시 할 수 없습니다 :

  1. https://code.google.com/p/volatility/wiki/AndroidMemoryForensics
  2. http://sgros-students.blogspot.ca/2014/04/lime.html

주로 첫 번째 가이드에 초점을 맞추었지만 커널을 크로스 컴파일하려고 할 때 첫 번째 문제에 직면했습니다. (금붕어 커널 소스를 다운로드 한 후)

그래서 먼저 내가 일을 간단하게의/etc/프로필이 추가

다음
export CCOMPILER=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- 
source /etc/profile 

내가 할 :

make clean 
make mrproper 
cp path/to/exported_from_emulator_config . 
mv config .config 
# Add the 3 lines needed "CONFIG_MODULES=y", "CONFIG_MODULES_UNLOAD=y", "CONFIG_MODULES_FORCE_UNLOAD=y" 
sudo vim .config 

을 이제 .. I 실제로 커널을 만들어야합니다. 그러나 온라인 가이드에서 제안 된 모든 것은 실패합니다.

make ARCH=arm CROSS_COMPILE=arm-eCross-eabi- EXTRA_CFLAGS=-fno-pic modules_prepare 
make CROSS_COMPILE=arm-eCross-eabi- EXTRA_CFLAGS=-fno-pic modules_prepare 
make CROSS_COMPILE=arm-eCross-eabi- modules 

을하지만 분명히 그들은 모두 내가 여기에 게시 2 가이드에 언급되고있는 이유로 실패 : 나는 노력했다. 그래서 .. 제 2 가이드의 사람들이 제안하는 메이크 파일을 변경했습니다 (ARCH를 make 인수로 사용하는 것을 피하기 위해). 그래서 어떻게 든 같이 컴파일 결국 다음의 모든 오류를 무시하고 수 있어요 :

make CROSS_COMPILE=$CCOMPILER 

주 1 : 나는 점점 계속 한 오류가 이것이다 : 따라서

/home/unknown/android-source/scripts/mksysmap: line 44: ~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm: No such file or directory 
make: *** [vmlinux] Error 1 

, 나는 믿는다 MODULE LOADING에 대한 3 가지 커널 옵션이 고려 중에 있지 않음을 나타냅니다. 하지만 전에는 리눅스 커널을 만들지 않았기 때문에 그것은 단지 가정입니다.

참고 2 : 커널을 컴파일하는 동안 .confif가 덮어 쓰여지고 있다고 생각합니다. 나는 꽤 자주이 출력을보고 오전 : 나는 또한하고 그것을 위해 나 menuconfig를 함께 프롬프트을 실행할 때 구성을 편집 시도

.config:120:warning: override: reassigning to symbol MODULES 

. 아니 행운 그러나.마지막으로

make CROSS_COMPILE=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- 

내가 관리를 컴파일 된 커널을 가지고 :

... 
SYSMAP .tmp_System.map 
OBJCOPY arch/arm/boot/Image 
Kernel: arch/arm/boot/Image is ready 
AS  arch/arm/boot/compressed/head.o 
GZIP arch/arm/boot/compressed/piggy.gz 
AS  arch/arm/boot/compressed/piggy.o 
CC  arch/arm/boot/compressed/misc.o 
LD  arch/arm/boot/compressed/vmlinux 
OBJCOPY arch/arm/boot/zImage 
Kernel: arch/arm/boot/zImage is ready 

는 다행히,이 같은 만들 호출 할 때 단순히 안드로이드 eabis에 정확한 경로를 넣어이 오류를 우회하는 관리

이제 LiME와 크로스 컴파일을 시도해야합니다! 나는 그것을 컴파일하고 Makefile로 놀아 보려고했지만, 같은 오류가 발생할 때마다 말해야 만한다. 컴파일 된 LiME와 안드로이드 커널 (커널과 컴파일러 경로를 변경하는 동안)을 성공적으로 교차시킨 사람들이 온라인으로 제공 한 모든 Makefile을 사용했지만 행운은 없습니다. 오류는 다음과 같습니다 :

ARCH = arm CROSS_COMPILE = ~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-/안드로이드 소스 M =/가정/알 수없는/라임 법의학/src에 모듈 메이크업 [1] : 입력 디렉토리 /home/unknown/android-source' Building modules, stage 2. MODPOST 1 modules WARNING: "vfs_write" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "filp_close" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "filp_open" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sock_sendmsg" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "memset" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sock_setsockopt" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sock_create_kern" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_get_int" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_set_int" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_get_charp" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "param_set_charp" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "iomem_resource" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "sscanf" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "strcmp" [/home/unknown/lime-forensics/src/lime.ko] undefined! WARNING: "__memzero" [/home/unknown/lime-forensics/src/lime.ko] undefined! CC /home/unknown/lime-forensics/src/lime.mod.o /home/unknown/lime-forensics/src/lime.mod.c:8:1: error: variable '__this_module' has initializer but incomplete type /home/unknown/lime-forensics/src/lime.mod.c:9:2: error: unknown field 'name' specified in initializer /home/unknown/lime-forensics/src/lime.mod.c:9:2: warning: excess elements in struct initializer [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:9:2: warning: (near initialization for '__this_module') [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:10:2: error: unknown field 'init' specified in initializer /home/unknown/lime-forensics/src/lime.mod.c:10:2: warning: excess elements in struct initializer [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:10:2: warning: (near initialization for '__this_module') [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:14:2: error: unknown field 'arch' specified in initializer /home/unknown/lime-forensics/src/lime.mod.c:14:10: error: 'MODULE_ARCH_INIT' undeclared here (not in a function) /home/unknown/lime-forensics/src/lime.mod.c:14:2: warning: excess elements in struct initializer [enabled by default] /home/unknown/lime-forensics/src/lime.mod.c:14:2: warning: (near initialization for '__this_module') [enabled by default] make[2]: *** [/home/unknown/lime-forensics/src/lime.mod.o] Error 1 make[1]: *** [modules] Error 2 make[1]: Leaving directory/홈/알 수없는/안드로이드 소스 ' 메이크업 : *** [기본] 오류 2

이러한 오류에 대해 조금 검색 한 결과, 커널이 유효하지 않거나 LiME를 사용하여 커널을 컴파일하는 것에 대한 결론을 내 렸습니다. 어느 날 .config 파일이 전에 말한 것처럼 make에 의해 고려되지 않고 있다고 생각하게 만듭니다.

이 과정의 저수준 항목을 이해할 수 없으므로 아무 것도 될 수 없습니다. 내 게시물을 읽는 데 시간이 걸릴 사람에게 정말 감사드립니다. 나는 거대한 것을 알고 있습니다./

모든 의견, 의견을 환영합니다! 더 많은 정보가 필요하거나 무언가를 고쳐야 할 필요가 있다면 알려주십시오.

감사합니다.

P. 어리석은 태그를 사용하는 것에 대해 미안하지만, SO는 "linux-memory-extractor"처럼 더 적절할 수있는 존재하지 않는 태그를 사용하지 못하게합니다.

답변

2

좋아, 나는 LiME의 개발자 인 Joe가 나를 도왔다. 모든

먼저, 당신이 만드는 않는 경우 덮어 쓰기의 .config 커널을 피하기 위해 당신은 무엇을해야 :

EXTRA_CFLAGS=-fno-pic 
:

make ARCH=arm CROSS_COMPILE=path/to/toolchains/bin goldfish_defconfig 
# then run menuconfig and enable all kernel module loading options and save with ESC 
make ARCH=arm CROSS_COMPILE=path/to/toolchains/bin menuconfig 
# then simply compile 
make ARCH=arm CROSS_COMPILE=path/to/toolchains/bin 

마지막으로, 경우에 당신은, 당신은이를 추가 할 수

LiME를 컴파일하려고 할 때!

희망이 있으면 도움이됩니다.

P.S : 나는 android ndk-r8의 eabis를 사용했습니다.

+0

"EXTRA_CFLAGS = -fno-pic"의 의미는 무엇입니까? --- 귀하의 툴체인 경로는 무엇입니까? –