正如標題所暗示的那樣..我在成功編譯LiME(Linux內存提取器)並將其加載到Android模擬器或物理設備上的過程中掙扎不已。編譯我使用arm-linux-androideabi-4.6,我目前在x64 14.04 Ubuntu上。 另外:編譯Android Kernel +與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
因此,爲了成功這個我按照從各個方面引導,網上沒有運氣..(這可能是由於DIFF NDK/SDK /紫光發行versios或者只是我的經驗不足的方向) 我已閱讀的導遊是那些(加上2名導遊,但SO不會允許我發佈更多的鏈接。如果需要,我可以把它們發佈評論以後):
- https://code.google.com/p/volatility/wiki/AndroidMemoryForensics
- http://sgros-students.blogspot.ca/2014/04/lime.html
我主要關注第1指南,但是在嘗試交叉編譯內核時遇到了我的第一個問題。
所以,首先(在已下載的金魚內核源代碼)我這個添加到/ etc/profile文件,使事情變得更簡單:
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
現在..我必須實際製作內核。但是,在線指南上建議的所有內容都會失敗。我曾嘗試:
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
但顯然他們都失敗了正在二號導遊,我張貼在這裏提到的原因。所以......我在Makefile中修改了第二個指南中的那些人(只是爲了避免給出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
因此,我相信沒有考慮到3模塊加載的內核選項。但這只是一個假設,因爲我從未構建過Linux內核。
注2:我必須注意到,我相信在編譯內核時,.confif正在被覆蓋。我看到這個輸出相當頻繁:
.config:120:warning: override: reassigning to symbol MODULES
我還試圖運行make並提示它或menuconfig的時候編輯的配置。然而,沒有運氣。
幸運的是,我設法通過調用作出這樣的時候乾脆把確切的路徑到Android eabis繞過這個錯誤:
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
所以現在我應該嘗試與LiME交叉編譯!我不得不說,我試着編譯它並玩Makefile,但每次我都得到相同的錯誤。我已經使用了由Android內核成功交叉編譯LiME的人們(在改變內核和編譯器路徑的同時)在線提供的每個Makefile,但沒有運氣。所以錯誤是:
使ARCH = arm CROSS_COMPILE =〜/ android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- -C〜 /機器人源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.S.對不起,使用愚蠢的標籤,但SO不會允許我使用不存在的標籤,這將是更合適的,如「linux內存提取器」等。
你是什麼意思「EXTRA_CFLAGS = -fno-pic」? ---你的工具鏈路徑是什麼? – 2015-09-15 08:23:49