問題タブ [bytecode-manipulation]
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.
java - OSGi を使用しているときにバイトコード操作を行うことは可能ですか?
私はアプリケーションサーバーを作成していますが、その中でいくつかのバイトコード操作を使用する必要があります (例:で注釈が付けられたクラスにカスタムequals
とメソッドを挿入する)。ここで、 ASMを使用してバイトコード変換を行う Java エージェント ( -javaagentオプション) をJVM に与えます。hashCode
@Entity
OSGiの使用を検討していますが、必要なバイトコード操作を実行できるかどうかはわかりません。
- OSGi を使用しているときにバイトコード操作を行うことは可能ですか? どのように?
- バンドルが動作するために何らかのバイトコード操作が必要であることを宣言することは可能ですか? たとえば、アプリケーション サーバーでは、独自のコア クラスの一部を操作する必要があります。
- 他のバンドルが何らかのバイトコード操作を必要とすることを、そのバンドルが知らずに指定することは可能ですか? たとえば、サーバー上で実行されるすべてのアプリケーションは操作する必要がありますが、アプリケーションはそれを知る必要はありません。
- バンドルが依存するすべてのバンドルをバイトコードで操作する必要があることを宣言することは可能ですか?
@Entity
これにより、アノテーションを含む API バンドルに依存するすべての人を操作する必要があることを簡単に宣言できます。
c++ - C++ でビッグ エンディアン値とリトル エンディアン値を変換するにはどうすればよいですか?
C++ でビッグ エンディアン値とリトル エンディアン値を変換するにはどうすればよいですか? 私は VC++ 6.0 を使用しています。_byteswap_ulong() 関数を使用した場合、ヘッダー ファイル intrin.h が必要です。ヘッダーを含めると、互換性のないコンパイラーと intrin.h が gcc コンパイラー用であるというエラーが報告されます。この関数以外に、VC++ でビッグ エンディアンとリトル エンディアンの値を変換する関数はありますか?
java - GeneratedMethodAccessor1,2などとは何ですか?なぜそれらが見つからない可能性がありますか?
次のようなスタックトレースを取得しています。
GeneratedMethodAccessor1、GeneratedMethodAccessor2、GeneratedMethodAccessorNとは何ですか?また、それらが見つからない原因は何ですか?実行時にバイトコードの書き換えを行っていますが、クラスがロードされる前にのみ、リフレクションによる最初のいくつかの呼び出しは正常に機能します。JITコンパイラが私のコードを取得した後にこれが起こっているのだろうかと思いますが、これをデバッグし始める方法についてはあまりよくわかりません。
java - コンパイルされたJavaクラス内のメソッド呼び出しの書き換え
コンパイルされたクラスファイルを解析しながら、特定のクラスへの呼び出しをメソッド本体内の別のクラスへの呼び出しに置き換えたい...
または言い換えると、メソッド内の特定のクラスの使用を検出し、その部分だけを置き換える方法はありますか? javaassistのようなものを使用するメソッドの。
たとえば..私がコンパイルされたバージョンを持っていた場合
Bの使用を検出し、実行するコードを変更する方法はありますか
別の方法として、使用するソースファイルをgrepするパーサーを作成することもできますが、リフレクションを使用して新しいコンパイル済みクラスファイルを生成するなど、より洗練されたソリューションをお勧めします。
何かご意見は ?
java - ASMJavaライブラリを使用した開梱
一部のリフレクションを置き換えるためにASMJavaライブラリを使用しています。このメソッドの本体を生成します:
この生成されたメソッドを使用すると、リフレクションを使用せずに実行時にオブジェクトにフィールドを設定できます。それは素晴らしい働きをします。ただし、プリミティブフィールドでは失敗することがわかりました。これが私のsetメソッドの関連部分です:
このコードは、selectのケースラベルを生成しています。オブジェクトには最適ですが、プリミティブの場合、次のエラーが発生します。
スタック上でフロートを見つけることを期待しています
わかりました、それは理にかなっています、私は自分で開箱をする必要があります。私は以下を実装しました:
トレースして、適切なフィールドの「case Type.FLOAT」に間違いなく入りますが、次のエラーが発生します。
スタック上でオブジェクト/配列を見つけることを期待しています
これは私が立ち往生しているところです。私の人生では、開開が機能しない理由を理解できません。「ALOAD、3」は、setメソッドの3番目のパラメーターをスタックに配置します。これはFloatである必要があります。何か案は?
asm-commonsライブラリには、unboxメソッドを持つGeneratorAdapterクラスがあることがわかりました。ただし、これほど単純なもののために、さらに別のJARを含めたくはありません。GeneratorAdapterソースを調べたところ、非常によく似た処理を行っています。GeneratorAdapterを使用するようにコードを変更して、機能するかどうかを確認しようとしましたが、変換が簡単ではありませんでした。
python - Python バイトコードを元のコードに再アセンブルしますか?
これはばかげた質問かもしれませんが、たとえば..
..または.pyc
ファイル - これを有効な Python ソース コードに再アセンブルすることは可能ですか? つまりどこreassemble(dis(myfunc)) == "def reassembled_function(x):\n print x ** 2"
特に実用的な理由ではありませんが、これが可能かどうか、または試みられたかどうかに興味があります..
関連している
java - JAXBはバイトコードインストルメンテーションを使用しますか?
私が働いている人は(スタックトレースで)-javaagent:spring-instrumentation.jarを使用してjvmを実行すると、JAXB注釈付きクラスに、私たちが記述しなかった奇妙な新しいメソッドがあることに気付きました。
これは、jaxbが利用可能なときにバイトコードインストルメンテーションを使用することを意味しますか?この機能の詳細はどこで読むことができますか?
ありがとう、ユヴァル
python - Pythonのモジュールからコードオブジェクトを生成する方法は?
対応するPythonソースコードがない.pycファイルがあります。disを使用したモジュールの分解を確認したい。モジュールをうまくインポートできます
しかし、dis.disを呼び出すために、モジュールオブジェクトを使用することはできません。fooをバックアップする対応するコードオブジェクトが必要です。どうすれば作成できますか?コンパイルビルトインは文字列、クラス、メソッド、関数をコンパイルできますが、ファイルやモジュールはコンパイルできないようです。
私が持っているものを前提として、このコードオブジェクトを生成するにはどうすればよいですか?
java - スタンドアロンのバイトコードベリファイア
私のバイトコードインストルメンテーションプロジェクトでは、VerifyErrorsに頻繁に遭遇します。ただし、デフォルトのjava Verifierは、どの命令がエラーを引き起こしたかについての情報をほとんど提供しません(メソッドと小さなメッセージのみを提供します)。エラーの特定、少なくとも正確な命令位置の特定にもう少し高度なヘルプを提供するスタンドアロンのバイトコードベリファイアはありますか?ありがとうございました。