質問

私はCモジュールにいくつかの問題に直面しています、ストリーミングに関連したネイティブアプリケーションを開発して...と私は何を持っていることはLogcatからいくつかのメッセージであるのです。

<時間>

ここでLogcatメッセージである

INFO/DEBUG(28): Build fingerprint: 'generic/sdk/generic/:2.1-update1/ECLAIR/35983:eng/test-keys'
11-17 12:40:07.550: INFO/DEBUG(28): pid: 5957, tid: 5957  >>> com.mmstwo <<<
11-17 12:40:07.561: INFO/DEBUG(28): signal 11 (SIGSEGV), fault addr deadd00d
11-17 12:40:07.561: INFO/DEBUG(28):  r0 00000354  r1 00129100  r2 0000000c  r3 deadd00d
11-17 12:40:07.561: INFO/DEBUG(28):  r4 00000026  r5 ad07ff50  r6 00000000  r7 fffe72f8
11-17 12:40:07.579: INFO/DEBUG(28):  r8 afe3bdfc  r9 4509f020  10 00000000  fp 00135a40
11-17 12:40:07.590: INFO/DEBUG(28):  ip ad080160  sp bef28f90  lr afe14cf7  pc ad035452  cpsr 20000030
11-17 12:40:07.840: INFO/DEBUG(28):          #00  pc 00035452  /system/lib/libdvm.so
11-17 12:40:07.850: INFO/DEBUG(28):          #01  pc 00027a98  /system/lib/libdvm.so
11-17 12:40:07.869: INFO/DEBUG(28):          #02  pc 00027bba  /system/lib/libdvm.so
11-17 12:40:07.879: INFO/DEBUG(28):          #03  pc 0002d98e  /system/lib/libdvm.so
<時間>
11-17 12:40:07.901: INFO/DEBUG(28):          #04  pc 0000142e  /data/data/com.mmstwo/lib/libnstreamer.so

これは私が使用するCクラスを表す線である。

<時間>

私のコメントのとおり私は、URLを追っこの前の質問には、ラーフルによって与えられ、テキストファイルに私の.soファイルをダンプします。

ここでそのテキストファイルです。

 141e:  4a2d        ldr r2, [pc, #180]  (14d4 <Java_com_mmstwo_NativeParser_stringFromJNI+0x408>)
    1420:   4b2d        ldr r3, [pc, #180]  (14d8 <Java_com_mmstwo_NativeParser_stringFromJNI+0x40c>)
    1422:   2184        movs    r1, #132
    1424:   5846        ldr r6, [r0, r1]
    1426:   18aa        adds    r2, r5, r2
    1428:   18eb        adds    r3, r5, r3
    142a:   4651        mov r1, sl
    142c:   1c38        adds    r0, r7, #0
    142e:   47b0        blx r6
    1430:   4b2a        ldr r3, [pc, #168]  (14dc <Java_com_mmstwo_NativeParser_stringFromJNI+0x410>)
    1432:   4669        mov r1, sp

ようポストあたりのグーグルでグループは、私は私の所望の線142eの周りにあるスニペットを示していたと特別ニクラスAnsmanによって示唆されます。

47b0 blx r6手段を何伝えることができ、ここで

今缶誰?

どのような私は知っていたこと、それは私が知らないことをアセンブリ言語で書かれたものですです。私はその行を理解する上で、あなたの助けを必要とします。

事前に感謝します。

役に立ちましたか?

解決

blxは、引数で指定されたアドレスにジャンプします。ここでは、現在のレジスタR6にロードされているアドレスへ。また、リターンアドレス(ldrの直後に配置されblxオペコードの、すなわちアドレス)(「リンク・レジスタ」のような)特殊目的レジスタLRに書き込まれる。

間接呼び出しにこれに相当します。 Cでは、関数ポインタを介してコールのようになります。動的リンクを持ついくつかのプラットフォームでは、関数への単純な関数呼び出しはまた、あなたがここで見るもののようなものになることができます。

とにかく、レジスタダンプショーは、その時点で0になるように、したがってセグメンテーション違反をR6。 R6は、ちょうど上記の132に設定されているアドレスR0 + R1、R1であったものから、アドレス1424この負荷R6にldrオペコードからロードされました。 R0は、C関数の最初の引数のための従来のレジスタである。

他のヒント

[OK]をGoogleでいくつかの変種掘削でそれを見つける。 '

blx平均Branch and link with exchange (BLX)と私は間違っていないよ場合には、Javaの文のreturn withValue型に似ています。

それはまた、ネイティブコードでデバッグを開始するために私を助けた......

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top