0

アーム内のコードを逆アセンブルしました。元のソース ファイルでこれらの命令に対応する行番号を知りたいです。

また、いくつかのことを理解したいと思います。

たとえば、言う機能はandroid::CameraHardware::createInstance、アセンブリで として表示されてい_ZN7android18CameraHardware14createInstanceEibます。これが正しい機能であるかどうか、私はそれを比較することになっているかどうかさえ完全にはわかりません。

名前が奇妙で、前後に物が追加されるのはなぜですか? 私は通常、C コードに対して同じことを行います。関数名は、逆アセンブルされたコードでは単純に見えます。

要約すると、2つの質問があります。

  • GDB 内で、アセンブリ命令の特定の行の行番号を取得する方法はありますか?

    たとえば、0x40d9078c で、ソース ファイルのどの行に対応するかを知りたいとします。インフォラインをやってみた。役に立たない。他の提案はありますか?

  • cpp コードの逆アセンブルを理解している場合、命名規則をどのように理解すればよいでしょうか? また、前提条件として理解する必要がある他のことは何ですか?

ありがとう。

4

1 に答える 1

3

android::CameraHardware::createInstanceからへの変換_ZN7android18CameraHardware14createInstanceEibは「名前マングリング」と呼ばれ、C++ では正常です。これは、異なるパラメーターを使用して同じ名前の複数の関数を作成し、foo(int x, double y)宣言しただけで定義しなかった場合に「が見つかりませんでした」とリンカーに通知させる方法です。

c++filtLinux では、マングルされた名前をマングルされていない形式に変換するために使用できます(Android が行う Linux スタイルのマングリング規則でコンパイルされていると仮定しますが、Microsoft でコンパイルされたコードを使用すると、明らかに機能しません)。

デバッグ シンボルを使用してコンパイルすると、gdb は特定のコードのソースを表示できるはずです。コンパイルの行に追加-gします。g++

于 2013-08-01T11:48:29.963 に答える