2

タイトルが示すように.. LiME (Linux Memory Extractor) を正常にコンパイルし、それを Android エミュレーターまたは物理デバイスにロードするのに苦労しています。コンパイルにはarm-linux-androideabi-4.6を使用しており、現在x64 14.04 Ubuntuを使用しています。また:

unknown@unknown-A15:~$ 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

だから、これを成功させるために、運が悪いオンラインに関するすべてのガイドの指示に従いました..さらに2つのガイドがありますが、これ以上のリンクを投稿することはできません.必要に応じて、後でコメントに投稿できます):

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

私は主に最初のガイドに焦点を当ててきましたが、カーネルをクロスコンパイルしようとしたときに最初の問題に直面しました。

最初に (goldfish カーネル ソースをダウンロードした後)、これを /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

しかし、どうやらそれらはすべて、私がここに投稿した 2 番目のガイドで言及されている理由で失敗します。だから..私は、2番目のガイドの人たちが提案するMakefileに変更を加えました(make引数としてARCHとして与えることを避けるためです)。そのため、次のすべてのエラーを何らかの形でバイパスし、最終的に次のようにコンパイルできます。

make CROSS_COMPILE=$CCOMPILER

注1:私が取得し続ける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 つのカーネル オプションは考慮されていないと思います。しかし、私はこれまで Linux カーネルを構築したことがないため、これは単なる仮定にすぎません。

注 2:カーネルのコンパイル中に .confif が上書きされると信じていることにも注意する必要があります。私はこの出力をかなり頻繁に見ています:

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

また、make および make プロンプトを実行するとき、または menuconfig を使用して構成を編集しようとしました。しかし、運はありません。

幸いなことに、次のように make を呼び出すときに android eabi への正確なパスを入力するだけで、このエラーを回避することができました。

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 で遊んでみましたが、毎回同じエラーが発生します。私は、(もちろんカーネルとコンパイラのパスを変更しながら) LiME と Android カーネルのクロス コンパイルに成功した人々によってオンラインで提供されたすべての Makefile を使用しましたが、うまくいきませんでした。したがって、エラーは次のとおりです。

make ARCH=arm CROSS_COMPILE=~/android-ndk-r10c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi- -C ~/android-source M=/home/ unknown/lime-forensics/src modules make[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/home/unknown/android-source に入る make: *** [デフォルト] エラー 2

これらのエラーについて少し調べたところ、カーネルが有効でないか、LiME とのクロス コンパイルに適したものではないという結論に達しました。前に言ったように、.configはmakeによって考慮されていないと思います。

私はこのプロセスの低レベルのことをよく理解していないので、何でもかまいません。私の投稿を読むのに時間を割いてくれる人には本当に感謝しています..私はその巨大さを知っています:/

提案、コメントは大歓迎です!さらに情報が必要な場合、または何かを修正する必要がある場合はお知らせください。

みんな、ありがとう :)

PS愚かなタグを使用して申し訳ありませんが、「linux-memory-extractor」などのより適切な存在しないタグを使用することはできません.

4

1 に答える 1

3

わかりました、LiME の開発者 Joe が私を助けてくれた後、私はそれを理解しました。

まず第一に、make を行うときにカーネルの .config が上書きされるのを避けるために、次のようにする必要があります。

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

最後に、必要に応じて、これを追加できます。

EXTRA_CFLAGS=-fno-pic

LiME! をクロスコンパイルしようとすると、

これが誰かを助けることを願っています!

PS: Android ndk-r8 の eabi を使用しました。

于 2014-11-10T00:24:32.107 に答える