1

gdbシンボルの読み取りと読み込みが自動的に行われるのを見てきました。(から読み取る以下のコードのようにld-linux-x86-64.so.2)

----------

gdb 86exec 86core
...
Reading symbols from 86exec...done.

Illegal process-id: 86core.

[New Thread 14983]

[New Thread 14978]

[New Thread 14980]

[New Thread 14981]

[New Thread 14982]
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.

Loaded symbols for /lib64/ld-linux-x86-64.so.2

Core was generated by `./86exec'.

Program terminated with signal 11, Segmentation fault.


----------

しかし、私のmipsプラットフォームでは、その自動読み取りが行われていません。

---------


Reading symbols from /mipsexec...done.

[New LWP 1333]

[New LWP 1328]

[New LWP 1330]

[New LWP 1331]

[New LWP 1332]

Core was generated by `./mipsexec'.

Program terminated with signal 11, Segmentation fault.


----------

この情報はどこから来たのか知りたかったのです。

mipscoreコアファイルからのものである場合、特定の情報があるかどうかを分析するにはどうすればよいですか。

4

1 に答える 1

0

mips gdb が PIE をうまくサポートしていないとは思えません。私が知っているように、PIC では mips を使用しますが、動的情報には使用rld_mapしませんDE_DEBUGが、PIE モードでは、mips は他のアーキテクチャのようにDT_DEBUG.

動的リンカーには、次のようなステートメントがあります。

#if !defined __mips__
        /* we disable for mips because normally this page is readonly
         * and modifying the value here needlessly dirties a page.
         * see this post for more info:
         * http://uclibc.org/lists/uclibc/2006-April/015224.html */
        if (dpnt->d_tag == DT_DEBUG)
            dpnt->d_un.d_val = (unsigned long)debug_addr;
#endif

PIC でのこのステートメントは問題ありませんが、PIE では機能しません。これを削除すると、mips のセクションが読み取り専用で#ifdefあるため、セグメント フォールトが発生します。arm や x86 などのセクションは書き込み可能です。.dynamic.dynamic

.dynamicmips のセクションを書き込み可能に変更DT_DEBUGし、動的リンカーで処理を開くと、機能しますが、まだいくつかの問題があります。たとえば、読み取り専用の VMA は書き込み可能であり、サブプロセスを fork するときにさらにページ コピーが必要です。

私は数週間前にこの問題に遭遇しましたが、mips gdb が Android 4.2 でうまく機能するかどうかはわかりません。Android 4.2 では、すべての c/c++ ファイルが PIE でビルドされます。

于 2013-07-15T09:42:22.697 に答える