問題タブ [symbol-tables]
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.
perl - Perl:シンボルテーブルを反復処理して、ロードされているFoo :: Barのすべてのサブクラスを見つける方法は?
その一部であるパッケージの例外を定義しているモジュールがあります。例外はで宣言されていException::Class::Nested
ます。
説明のために、このモジュールの名前Foo::Bar::Exception
がであり、それが定義するすべての例外がそのモジュールの第1レベルのサブクラスであるとします(たとえば、Foo::Bar::Exception:DoNotDoThat
)。私が気にするすべての例外は、このモジュールファイルで定義されています。他のモジュールが行う追加のサブクラス化には興味がありません。
私のimport
方法では、定義されているすべての例外のリストを作成したいと思います。定義と同期しなくなる可能性があり、手動で保守する必要があります。
では、のシンボルテーブルをFoo::Bar::Exception->import
反復処理しFoo::Bar::Exception
て、モジュールで宣言されているすべての例外(第1レベルのサブクラス)を見つけるにはどうすればよいでしょうか。これは、私が興味を持っているアクティブなロード済みシンボルテーブルです。ファイルシステム検索などはありません。
ありがとう!
[補遺]
私の例外サブクラス名はすべてException
またはで終わるのでError
、これは私が望むものに近づいているように見えます:
括弧の一部は不要ですが、配列のコンテキストを明確にするために追加しました。
c++ - リリースされたソフトウェアの C++ コア ファイルのデバッグ
ソフトウェアのリリース バージョン (gcc でコンパイルされた C++ コード) から送信されたコア ファイルをデバッグする方法を見つけようとしています。理想的には、リリース ビルドをデプロイし、デバッグ ビルドを手元に置いてデバッグに使用できるようにしたいので、シンボル テーブルなどを用意します。
私の問題は、(私が理解しているように) デバッグ ビルドとリリース ビルドが同じであることが保証されていないことです。そのため、gdb を起動してデバッグ実行可能ファイルを指定すると、フィールドのコア ファイルがゴミのように見えることがあります。
リリースされたソフトウェアのサイズやパフォーマンスに影響を与えずに、これを回避する方法はありますか (ここに問題があります)。これは大規模なアプリケーションであり、デバッグ ビルドのパフォーマンスはおそらく顧客に受け入れられないでしょう。一度ビルド (デバッグ) してから、シンボル テーブルを取り除き、それをリリース ビルドとして出荷するという提案を見てきましたが、そのアプローチではパフォーマンスが低下するのではないでしょうか?
この問題に対処するために試したこと、または現在使用していることについて誰か提案がありますか? ありがとう!
windows - Visual Studio によって生成されたバイナリにシンボルがないというのは本当ですか?
すべて同じ出力:
これは、いくつかの実験の結果、私が見つけたものですがobjdump
、これは本当ですか?
その場合は、もう少し詳しく説明したいと思います。ウィンドウの下のすべてのバイナリにシンボルがないというのは本当ですか?
symbol-tables - SymtabAPIはバイナリを暗黙的に変更しません
DyninstAPI(つまり、SymtabAPIコンポーネント)を使用して、バイナリのシンボルテーブルを書き換えています。私はそうするために次の方法を使用しています:
メソッドは正常に戻り、エラーコードを確認し、正常に置き換えられたデータセクションを再読み込みします。問題は、元のバイナリが新しいraw.data
セクションで書き換えられず、元のraw.data
セクションが保持されることです。
ある種のコミット関数があるかどうかを確認するためにマニュアルを精査しましたが、文書化されておらず、例にはそのようなものは何も記載されていません。 編集:私はクラスのソースコードのいくつかを読んだだけで、Region
基本的に何をしているように見えますpatchData
(それが私が使用すべきメソッドである場合)。
提案?
プログラミングマニュアルはhttp://www.paradyn.org/html/manuals.htmlで入手できます。
PSうまくいけば、より評判の良いユーザーがタグDyninstAPI
を追加でき、SymtabAPI
私にとっては。
perl - 別のパッケージで呼び出されたときにsysreadなどのコア関数をオーバーライド/ラップする最善の方法
私はPerlで書かれたかなり複雑なアプリケーションに取り組んでいます。私はその言語にかなりの経験がありますが、私はこれに困惑しています。
コンストラクターに渡すファイルハンドル(この場合は双方向ソケット)のさまざまな操作にsysreadとsyswriteを使用するモジュールFooを使用しています。
次のことを行いたい:私が書いている別のモジュール(これをBarと呼びましょう)から、Fooに属するメソッド内から呼び出された場合にのみsysread/writeが動作する方法を変更したい
Sysread et alは、他のすべての場所で通常どおりに機能する必要があります。Fooではsysreadの使用は変わらないと安全に想定できます。
これを実行したい理由は、前述のファイルハンドルからの読み取り/書き込みのバイト数を追跡する必要があるためです。この時点で、これは私がこの情報を取得できる唯一の方法のようです-基本的にsysread/writeからの戻り値を保存します。
品質が良ければ、CPANの何でも問題なく使用できます。
更新:特定の問題に対するより良い解決策を見つけ、ここにコードを投稿しました:
https://github.com/Hercynium/Tie-Handle-CountChars
私のアプリケーションでは非常にうまく機能しているようですが、より徹底的にテストし、実際の単体テストをいくつか作成するまで、CPANに投稿しません:)
linux-kernel - ストリップされた Linux カーネル イメージのロード アドレスとエントリ ポイントを特定する
x86 Linux に組み込みシステム (mipsel) 用のクロスコンパイル ツールチェーンがあります。カスタムカーネル(イメージを「vmlinux」と呼びましょう)を構築する方法と、そのイメージを削除する方法を知っています
さらに処理するには、イメージのロード アドレスとエントリ ポイントも必要です。ストリッピングする前にscripts/mksysmap
、それらを介して、またはより明示的に決定することは問題ありません
次に、ロードアドレスとエントリポイントを決定できます
ここでの課題は、カーネルを自分でビルドするのではなく、objcopyを介してシンボルを既に削除した後に、事前にビルドされたカーネルを取得することがあるということです。誰でもこれを行う方法を教えてもらえますか? 私はカーネルの構築とツールチェーンの使用にあまり精通していません。nmとobjdumpの両方が、ストリップされたイメージを気に入らず、次のように述べています。
ruby - Ruby でのシンボル テーブルの設計と実装
私はRubyで字句解析器を構築しており、シンボルを収集してシンボルテーブルに保存しようとしています。シンボルの設計に関する私の主な質問と、それが静的テーブル(すべてのデータがクラスレベルで保持されることを意味する)であるべきか、それともインスタンスごとであるべきかについて。
オプション 1: クラス レベルのデータ構造
このスキームでは、SymbolTable クラスは一種の「静的」機能を備えています。つまり、SymbolTable のインスタンスを実際に作成するのではなく、存在する唯一のオブジェクトはクラス レベルのオブジェクトです。
SymbolTableEntry
(ここでは定義していませんが、有効なオブジェクトであると仮定します)
元:
オプション 2: インスタンス レベルのデータ構造
このスキームでは、シンボル テーブルに値を追加するために、SymbolTable クラスのインスタンスを実際にインスタンス化する必要があります。
どのデザインを使用するか、または使用することを好むかについて、すべての意見や、一般的な Ruby コードに関するコメントをお待ちしております。
ありがとう
java - Javaメソッドの内部識別とは?
ご存知のように、Java では、メソッド名だけでは異なるメソッドを区別するのに十分ではありません。
メソッドを区別するには、次の情報が必要だと思います(間違っている可能性があります)。
さらに遠く、
- 内部でより効率的にメソッドを識別する方法は?
- 「メソッドID」について聞いたことがあります。上記のトリプルと整数の間にマッピングがあるため、JVM は解析後にメソッド ID のみを使用するということですか?
- もしそうなら、それはシンボルテーブルに常駐していますか?
ありがとう!
c - 実行中の C プログラムは、独自のシンボル テーブルにアクセスできますか?
TCPソケットに送信されたリクエストを処理するLinux Cプログラムがあります(特定のポートにバインドされています)。そのポートへのリクエストを介してCプログラムの内部状態を照会できるようにしたいのですが、照会できるグローバル変数をハードコーディングしたくありません。したがって、クエリにグローバルの文字列名を含め、C コードでその文字列をシンボル テーブルで検索してそのアドレスを見つけ、その値を TCP ソケット経由で送り返すようにします。もちろん、シンボル テーブルが削除されていてはなりません。では、C プログラムは独自のシンボル テーブルを見つけることさえできますか? 名前を指定してシンボルを検索するためのライブラリ インターフェイスはありますか? これは、gcc でビルドされた ELF 実行可能 C プログラムです。
compiler-construction - タイプ テーブルからシンボル テーブルへの参照
シンボル テーブルから型テーブルへの参照が常に存在することは誰もが知っていますが、逆のケースも発生する可能性があります。テーブル参照をシンボルテーブルに戻すことができる手段はありますか? はいの場合、例を提供してください。