Hatena::ブログ(Diary)

麗ちゃんとママの実験ノート

2011-10-23

[] 果物大好き! 18:12

山形のお爺ちゃんから美味しいフルーツ沢山届きました。

麗は食べさせろと大興奮!

お爺ちゃん、ありがとうございます。

f:id:chiakisugimoto:20111018204245j:image

りんごの箱をしまったら、

りんご食わせろー、とおお泣き

f:id:chiakisugimoto:20111018204343j:image

りんごうめぇー

f:id:chiakisugimoto:20111021212231j:image

f:id:chiakisugimoto:20111021212257j:image

プラム美味しい

f:id:chiakisugimoto:20111003210100j:image

洋ナシうめぇー

f:id:chiakisugimoto:20111005205233j:image

f:id:chiakisugimoto:20111005205137j:image

太鼓たたきに!

f:id:chiakisugimoto:20111012211510j:image

お立ち台

f:id:chiakisugimoto:20111005081256j:image

積み木遊び

f:id:chiakisugimoto:20111017081026j:image

トラックバック - http://d.hatena.ne.jp/chiakisugimoto/20111023

2011-10-02

[] 麗ちゃんもうすぐ1歳半 17:18

このところ仕事に、趣味の開発に、家事にと、とても忙しくて更新できていませんでした。

麗ちゃんもすっかりお姉さんになりました。

f:id:chiakisugimoto:20110928204935j:image

f:id:chiakisugimoto:20110925200118j:image

f:id:chiakisugimoto:20110918163816j:image

f:id:chiakisugimoto:20110918154248j:image

トラックバック - http://d.hatena.ne.jp/chiakisugimoto/20111002

2011-06-19

[] 麗ちゃん「ニャーニャ」 21:14

麗ちゃん1歳2ヶ月。随分しっかり歩けるようになりました。

イヌとネコの絵本を見て、「ニャーニャ、ワンワン」と片言が言えるようになり、おててをあわせてごちそうさまでしたもできるようになりました。

あと、「お鼻」と「お耳」も分かるように。ガーゼをおけにつけながら、手洗い洗濯のマネをしたり、ガーゼを背中にまわして、背中を洗うマネをしたり、お掃除が始まると掃除機のコンセントを差しに行ったり、お人形を抱っこして「かわいいかわいい」となでなでトントンしたり…。毎日目覚しい成長を続けています。

f:id:chiakisugimoto:20110618141145j:image

f:id:chiakisugimoto:20110615190645j:image

トラックバック - http://d.hatena.ne.jp/chiakisugimoto/20110619

2011-06-04

[] 麗ちゃん10歩! 17:21

最近の麗ちゃん、

・10歩歩けるようになりました。

・麗ちゃんをフルネームで呼ぶと、「あーい」とおててあげてお返事します。

携帯電話を操作して、背景画像やデスクトップアイコンを変えたり、暗証番号による操作ロックをかけたり、運転マナーモードにしたり…と、ばあちゃまの携帯電話を元に戻すのに一苦労しました。

・知らない間に固定電話でよそのおうちにかけちゃったりします。(ごめんなさい)

・口紅で落書きが大好きです。

・なんでもかんでもゴミ箱にIN!知らない間に大事なものもゴミと一緒に出してしまいました。。

・くしで髪をとかしてキレイキレイします。

携帯電話持ってもしもしします。

・お風呂掃除や絨毯のコロコロお掃除の真似をします

PS3の電源ボタンやコントローラ、テレビのリモコンを触って、画面が変化するのを楽しみます。

・パソコンをたたいたり、マウスの抜き差しして遊びます。

・お家の階段を手足を使って登ろうとします。

・麺棒をバラバラに出して、足の指でつまんだり、箱にしまうマネができます。

・やりたいことを阻まれると、強情に叫び倒します。

いーっぱいできるようになったね♪

「○○麗ちゃん。」「はーい」

f:id:chiakisugimoto:20110530173844j:image

[] リバースエンジニアリング検証 16:57

apkを元に、Proguardをかける前かけた後でどのくらい解読具合が異なるのか、パッケージが含むC++等のネイティブライブラリ(libXX.so)やjarライブラリがどのくらい解読し得るのか、少し気になって、自作アプリで確認してみた。

結論は、ネイティブライブラリの解読は逆アセンブルで困難だが、javaのソースはjarライブラリもプロジェクトのソースもしっかり見えた。

Proguardをかけるとやはり見えにくくはなっているが、ある程度推測して解読はできる感じ。(アプリのつくりにもよるが)

試したリバースエンジニアリングの手順は以下。

1.apkをunzipして、プロジェクトに含まれるclass.dex(javaclassファイルの情報)、Manifestやresourceのxmlを取り出す。

2.http://code.google.com/p/android4me/ からAXMLPrinter2.jarダウンロードして、AndroidManifest.xmlや、res/***/***.xmlを復元。

$ java -jar AXMLPrinter2.jar AndroidManifest.xml 

3.http://code.google.com/p/dex2jar/からdex2jarをダウンロードし、classes.dexをjarに復元

$ dex2jar.bat classes.dex
$ ls
classes.dex.dex2jar

4. http://java.decompiler.free.fr/からJava Decompiler(jd-gui)をダウンロードし、3で復元したからJavaソースを復元。

$ jd-gui.sh classes.dex.dex2jar

5.class.dex.dex2jarを展開し、含まれるjarネイティブライブラリを取り出す。

$ jar xvf class.dex.dex2jar

パッケージが展開され、含まれるjarネイティブライブラリが取り出せる。

jarライブラリは更に本コマンドで展開するなり、4で復元してもよいし、EclipseのInstallからhttp://java.decompiler.free.fr/jd-eclipse/updateを追加してjd-eclipseインストールし、jarや各classを開いても復元される。

ネイティブライブラリは、逆アセンブラで解読できる範囲まで。。

解析の仕方は、前のエントリ http://d.hatena.ne.jp/chiakisugimoto/20110604/1307170484 とか。

$ mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-objdump -d libCube.so(以前物理エンジンサンプルとして作成したネイティブライブラリ)
/パス/libCube.so:     file format elf32-littlearm

Disassembly of section .plt:

0003531c <.plt>:
   3531c:       e52de004        push    {lr}            ; (str lr, [sp, #-4]!)
…略
0009a14c <Java_chiaki_test_cube_Cube_simulate>:
   9a14c:       b5f0            push    {r4, r5, r6, r7, lr}
   9a14e:       465f            mov     r7, fp
   9a150:       4656            mov     r6, sl
   9a152:       464d            mov     r5, r9
   9a154:       4644            mov     r4, r8
   9a156:       b4f0            push    {r4, r5, r6, r7}
   9a158:       4ac8            ldr     r2, [pc, #800]  (9a47c <Java_chiaki_test_cube_Cube_simulate+0x330>)
   9a15a:       b0f3            sub     sp, #460
…略
   9a178:       6123            str     r3, [r4, #16]
   9a17a:       6165            str     r5, [r4, #20]
   9a17c:       61a5            str     r5, [r4, #24]
   9a17e:       61e1            str     r1, [r4, #28]
   9a180:       1c07            adds    r7, r0, #0
   9a182:       2058            movs    r0, #88
   9a184:       468b            mov     fp, r1
   9a186:       f79b e970       blx     35468 <_ZdvRK9btVector3S1_-0x18>
   9a18a:       1c21            adds    r1, r4, #0
   9a18c:       1c05            adds    r5, r0, #0
   9a18e:       f7b4 fd4d       bl      4ec2c <_ZN31btDefaultCollisionConfigurationC1ERK34btDefaultCollisionConstructionInfo>
   9a192:       48bb            ldr     r0, [pc, #748]  (9a480 <Java_chiaki_test_cube_Cube_simulate+0x334>)
   9a194:       f79b e968       blx     35468 <_ZdvRK9btVector3S1_-0x18>
   9a198:       1c29            adds    r1, r5, #0
   9a19a:       1c06            adds    r6, r0, #0
   9a19c:       f7a9 fdac       bl      43cf8 <_ZN21btCollisionDispatcherC1EP24btCollisionConfiguration>
   9a1a0:       209c            movs    r0, #156
   9a1a2:       f79b e962       blx     35468 <_ZdvRK9btVector3S1_-0x18>
   9a1a6:       2100            movs    r1, #0
   9a1a8:       4682            mov     sl, r0
   9a1aa:       f79f fb55       bl      39858 <_ZN16btDbvtBroadphaseC1EP22btOverlappingPairCache>
   9a1ae:       2080            movs    r0, #128
   9a1b0:       f79b e95a       blx     35468 <_ZdvRK9btVector3S1_-0x18>
   9a1b4:       4681            mov     r9, r0
   9a1b6:       f7ec fe2b       bl      86e10 <_ZN35btSequentialImpulseConstraintSolverC1Ev>
   9a1ba:       2088            movs    r0, #136
   9a1bc:       0040            lsls    r0, r0, #1
   9a1be:       f79b e954       blx     35468 <_ZdvRK9btVector3S1_-0x18>
   9a1c2:       1c31            adds    r1, r6, #0
   9a1c4:       1c04            adds    r4, r0, #0
   9a1c6:       4652            mov     r2, sl
   9a1c8:       464b            mov     r3, r9
   9a1ca:       9500            str     r5, [sp, #0]
   9a1cc:       f7f5 f98a       bl      8f4e4 <_ZN23btDiscreteDynamicsWorldC1EP12btDispatcherP21btBroadphaseInterfaceP18btConstraintSolverP24btCollisionConfiguration>
   9a1d0:       6823            ldr     r3, [r4, #0]
   9a1d2:       4aac            ldr     r2, [pc, #688]  (9a484 <Java_chiaki_test_cube_Cube_simulate+0x338>)
…略

[] dalvikVM 15:52

こちらを参考にコンカレントGCの中を覗いてみました。

http://www.slideshare.net/akachochin/dalvikvm?from=download_email_for_pro&show_download_info=true#favsGroupsEvents

JITとhprofのON/OFF、シグナルのハンドリングとダンプについて、こちらが参考になりました。

http://blog.kmckk.com/archives/3076212.html

http://blog.kmckk.com/archives/3456418.html#more

http://java.dzone.com/articles/viewing-hprof-android

ななしななし 2011/10/01 21:33 突然のコメントで失礼します。
大変、勉強になりましたので、せめて、お礼だけでもと思い、コメントを書かせていただきました。
ありがとうございました。

2011-05-30

[] コアサービス開発に必要な情報を整理3 17:47

こちらによくまとめられたスライドがありました。参考にさせて頂きました。

http://blog.kmckk.com/archives/3676340.html#more

以下自分用メモメモ

メモ1 androidの素の様子

デバイスプロセスツリー

    init
            |-zygote-+-system_server-+-
                                     |-android.process.acore
                                     |-android.process.media
                                     |-com.android.phone
                                     |-com.adnroid.alarmclock
                                     |-com.android.music
                                     |-com.android.mms
                                     |-com.google.process.gapps
                                     |-com.google.android.apps.maps

            |-mediaserver-+-{mediaserver}
            |                 |-{mediaserver}
            |
            |-rild-+-{rild}
            |          |-{rild}
            |          `-{rild}
            |
            |-servicemanager

chiaki@ubuntu:~/mydroid$ vi frameworks/base/cmds/servicemanager/service_manager.c 
chiaki@ubuntu:~/mydroid$ vi ./frameworks/base/cmds/servicemanager/binder.c
struct binder_state *binder_open(unsigned mapsize)
{
    struct binder_state *bs;

    bs = malloc(sizeof(*bs));
    if (!bs) {
        errno = ENOMEM;
        return 0;
    }

    bs->fd = open("/dev/binder", O_RDWR);

    int binder_write(struct binder_state *bs, void *data, unsigned len)
    {
 	…略
        res = ioctl(bs->fd, BINDER_WRITE_READ, &bwr);
…略

その他で/dev/binderを使っているところ

chiaki@ubuntu:~/mydroid$ view frameworks/base/libs/binder/ProcessState.cpp
static int open_driver()
{
    if (gSingleProcess) {
        return -1;
    }

    int fd = open("/dev/binder", O_RDWR);
||>

Javaから使う
>|cs|
frameworks/base/core/java/android/os/ServiceManager.java
frameworks/base/core/java/android/os/ServiceManagerNative.java
frameworks/base/core/java/android/os/IServiceManager.java

android.os.ServiceManager:

    IBinder getService(String name)

    IBinder checkService(String name)

  Binder DriverにaddServiceを加える
    void addService(String name, IBinder service)
    
  String[] listServices()

メモ2 素の実装

1.IServiceManager、IPCThreadStateを使ってコアサービスをBinderDriverに加える(BBinder::onTransact())ためのクラスを作る

2.1.のオブジェクトを作成してBinderDriverに実際にコアサービスを追加する

3.2を利用するネイティブクラスでは、ServiceManagerのインターフェース(BpBinderのIBinderインターフェース)を使ってサービス2を使う

4.Nativeコードからサービス2を呼び出せる

5.JavaからはNativeコード4を呼び出してサービス2の結果を得られる

Java→JNINativeメソッド→クラス3(のbinder)→IBinderインターフェース→BpBinder→IBinderインターフェース→サービス2


メモ3 メモ2+Proxyパターン

BpBinderを触らず、Proxyを作ってBinderに異なるインターフェースを持たせる

Java→JNINativeメソッド→Nativeのクラス3→クラス3のインターフェースプロキシクラス→IBinderインターフェース→BpBinder→IBinderインターフェース→サービス2


メモ4 メモ3+Stubパターン

onTransact()をStubで実装する。

Java→JNINativeメソッド→Nativeのクラス3→クラス3のインターフェースプロキシクラス→IBinderインターフェース→Stub(onTransact)→(インターフェースを介して)→サービス2

トラックバック - http://d.hatena.ne.jp/chiakisugimoto/20110530