問題タブ [nm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 共有ライブラリ内の未定義の外部シンボル
私は最近、iOS SDK4.3nm -m -p -g
のSystem.B.dylib
ライブラリを実行しましたが、多くのシンボルがマークされていることに驚きました(undefined) (external)
。未定義のシンボルが外部としてマークされるのはなぜですか? lazy
orとマークされた未定義の外部シンボルは理解できますweak
が、そうではありません。関数の多くは、pthread_xxx
このカテゴリに分類されます。ただし、このライブラリとリンクすると、すべてのシンボルが解決されます。pthread_xxx
シンボルはフォルダー内のライブラリの 1 つに定義されているので\usr\lib\system
、そこから満足していると思います。リンク中にどのように機能しますか?
c++ - addr2line に間違った関数名が表示される: 「グローバル」ではなく「ローカル」テキスト記号
これは、かなり古い OS (RHEL 4) またはコンパイラ (g++ 3.4.6) を使用していることが原因である可能性がありますが、誰かがこれを見たのではないかと考えています。
nm を使用すると、1 つの関数が .LXXXX の形式の複数のローカルテキスト シンボル (タイプ 't') によって分割されていることがわかります。X は数字です (例: .L5156)。グローバルテキスト シンボル (タイプ 'T') は、実際の関数名です。
しかし addr2line は、ローカルのテキスト シンボルを有効な関数名として扱うようです。したがって、ローカル テキスト シンボルの後にアドレスを指定すると、それが関数名として返されます。
これを修正する方法について何か提案はありますか? (OSまたはコンパイラをアップグレードせずに...私が受け入れることは不可能かもしれません...)
linux-kernel - ストリップされた Linux カーネル イメージのロード アドレスとエントリ ポイントを特定する
x86 Linux に組み込みシステム (mipsel) 用のクロスコンパイル ツールチェーンがあります。カスタムカーネル(イメージを「vmlinux」と呼びましょう)を構築する方法と、そのイメージを削除する方法を知っています
さらに処理するには、イメージのロード アドレスとエントリ ポイントも必要です。ストリッピングする前にscripts/mksysmap
、それらを介して、またはより明示的に決定することは問題ありません
次に、ロードアドレスとエントリポイントを決定できます
ここでの課題は、カーネルを自分でビルドするのではなく、objcopyを介してシンボルを既に削除した後に、事前にビルドされたカーネルを取得することがあるということです。誰でもこれを行う方法を教えてもらえますか? 私はカーネルの構築とツールチェーンの使用にあまり精通していません。nmとobjdumpの両方が、ストリップされたイメージを気に入らず、次のように述べています。
unix - `nm` ユーティリティがそのように名付けられたのはなぜですか?
バイナリ内のシンボルを一覧表示するユーティリティのnm
ドキュメントには、どのように名前が付けられたかについての説明や手がかりが含まれていませんnm
。
長年の経験を積んだ UNIX 開発者の何人かが光を当てることができると思います。
nm
ユーティリティがそのように名付けられたのはなぜですか?
c++ - C++ ソース ファイルからグローバル変数のリストを作成する
私は現在、問題、そのステートメントに取り組んでいます-.CPPファイルで宣言されたすべてのグローバル変数のリストを含むテキストファイルを生成します。
私はいくつかのアイデアを思いつきました。最初のアイデアは次のとおりです。
ctags を使ってみたので、短いスクリプトを書きました:
このコードは、cpp_source_file_list.txt から .cpp ソース ファイルのファイル名を取得し、グローバル変数をスキャンして (const を無視して) レポート "filename [変数のリスト] を書き込みます。私が遭遇した主な問題は、ctags が無視して非常に奇妙な動作をすることです。場合によっては STL タイプ。
たとえば、「vector v;」という行を除外して、「std::vector v;」を含めることができます。
このような問題を解決する方法はありますか? ctags -I ./id.txt 追加キーを使用して、オーバーライドする識別子のリストを手動で作成しようとしていますが、誤った結果ももたらします。
2 番目の方法:
次のような nm コマンドを使用します。
ただし、この場合、次のような不要な情報を受け取ります。
そして今、これらのメソッドの1つを改善して、宣言されたグローバル変数のリストに関する正しい情報を任意の.cppソースファイルから取得する方法がわかりません。この問題について何か提案をいただければ幸いです。
linux - /lib32/libc.so.6に2つの「fopen」記号が含まれているのはなぜですか?
ここに私の質問があります:
/lib32/libc.so.6に2つのfopenシンボルが含まれているのはなぜですか?同じターゲットファイル内の同一のシンボルは禁止されるべきですよね?
readelf -sがfopenの代わりにfopen@@GLIBC_2.1とfopen@GLIBC_2.0をダンプするのはなぜですか?
ありがとう
ios - iOS 5.1 - 特定の共有ライブラリ内の関数を一覧表示する GDB コマンドまたはユーティリティ
gdb のプログラム内のすべての関数を一覧表示するコマンドがありますが、特定の共有ライブラリ内のシンボルを一覧表示するだけのユーティリティや gdb コマンド/構文は見つかりませんでした。nm は arm7 共有ライブラリでは機能しません。それを行う方法はありますか?
elf - elf 実行可能ファイルからの構造内の要素のアドレス
デバッグ用にコンパイルされていない ELF 実行可能ファイルから構造内の要素のアドレスを取得することは可能ですか?
例、次のコードが与えられた場合:
nm と readelf の両方が変数「places」の開始アドレスを提供し、readelf も sizeof を提供します。
ただし、必要なのは、構造内の各要素のアドレスです。したがって、上から私が欲しいのは次のとおりです。
現時点で私の唯一のルートは、dwarf2 デバッグ情報を使用してコンパイルし、readelf (-wliao) を使用して .debug_info セクションをダンプし、DW_TAG_variable から型ツリーを解析して base_type のサイズを加算することです。例の読み取り:
ソースコードにアクセスせず、デバッグ情報をオフにしてこれを行う方法を見つける必要があります..
ヘルプやポインタをいただければ幸いです。
ありがとう、クリス
macos - Mac OS X でお気に入りの逆アセンブラ ツールは何ですか?
およびテキスト エディタを使用しotool
てバイナリを逆アセンブルしています。この時点でのワークフローは非常に簡単です。nm
Fraise
Mach-o
-
1. 既存のシンボルを一覧表示します。
-
2. disasm コードを取得します。
-
3. この出力をテキスト ファイルにコピー アンド ペーストします。
-
4. テキスト エディターでコードを読み、コメントします :)
上の disasm コードの操作を簡素化するツールを探していますMac OS X
。