問題タブ [javap]
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 - javap ツールを使用して jar ファイル内のクラス構造を出力するにはどうすればよいですか?
javap ツールを使用して、jar 内のクラス ファイルのメソッドを一覧表示したいと考えています。jar 内のすべてのクラス ファイルのメソッドとメンバーを一覧表示するにはどうすればよいですか。今のところ、一度に 1 つのクラスだけを行うことができます。
私が言うなら、私は何かを期待しています
java.lang パッケージ内のすべてのクラスのメソッドとメンバーを登録する必要があります。javap にそれができない場合、そのようなツールはありますか?
java - Web からランタイム クラス情報を取得しますか? javap のようなものですが、実行時にメモリにロードされたクラスで
私はWebsphereと複雑なクラスローディングの問題に取り組んでいます。通常は javap によって印刷される情報 (メソッドなど) をダウンロードまたは印刷できるようにしたいと考えています。
バイナリ差分を実行するために、未加工のバイナリ クラス データを取得する必要がある場合もあります。
これをどのように行いますか?
java - スカラセッターメソッド「myvar_$eq(myval)」をJavaでより快適なものにエイリアスするにはどうすればよいですか?
私は最近、自分自身に言語を教えようとして、いくつかのコードをJavaからscalaに変換しています。
このscalaクラスがあるとします。
今、私はJavaからアクセスしたいので、scalaにいる場合のようにドット表記を使用することはできません。
したがって、次のように発行することで、変数の内容を取得できます。
次の方法で設定します。
これは、私たちのPersonクラスがjavapで次のように見えるために当てはまります。
はい、私は自分のゲッター/セッターを書くことができましたが、クラスをそれで満たすことは嫌いであり、すでにそれらを持っていることを考えるとあまり意味がありません-私は_$eqメソッドをより良くエイリアスしたいだけです。(これは、antlrのようなものを扱っている場合、実際にはさらに悪化します。これは、それをエスケープする必要があり、person.name _ \ $ eq( "newname");のようになってしまうためです。
注:クラスをより多くのセッターメソッドで満たすのではなく、これに我慢する必要があります。
では、この状況であなたはどうしますか?
java - Java用の逆アセンブラ+デバッガ(ala OllyDbg /アセンブラ用のSoftICE)はありますか?
OllyDbg / SoftICE for javaに似たユーティリティはありますか?つまり、クラスを実行し(jarから/クラスパスを使用)、ソースコードなしで、中間コードの逆アセンブルを示し、ステップスルー/ステップオーバー/参照の検索/メモリ内の特定の中間コードの編集/ファイルへの編集の適用を行います。 。
そうでない場合は、このようなものを書くことさえ可能ですか(デバッグ期間中はホットスポットなしで生きることをいとわないと仮定します)?
編集:私はJADまたはJDまたはCavajについて話していません。これらは優れた逆コンパイラですが、いくつかの理由で逆コンパイラは必要ありません。最も注目すべきは、出力が正しくないことです(せいぜい、場合によってはまったく間違っていることもあります)。私は魔法の「Javaコードにコンパイルされたバイト」を探していません-実行されようとしている実際のバイトを見たいのです。また、(アセンブリデバッガーの場合と同様に)これらのバイトを変更し、できれば変更した部分をクラスファイルに書き戻す機能が必要です。
Edit2:javapが存在することは知っていますが、それは1つの方法しか実行しません(そして、いかなる種類の分析も行いません)。例(vmspecドキュメントから取得したコード):javaコードから、「javac」を使用してこれをコンパイルします。
java.classファイルに。javap -cを使用すると、次の出力を取得できます。
これは逆アセンブル部分では問題ありませんが(分析なしではあまり良くありません-「フィールド#4はExample.i」です)、他の2つの「ツール」が見つかりません。
- 命令自体(スタック、メモリダンプなど)を調べて、実際のコードと環境を調べることができるデバッガー。
- プロセスを逆にする方法-分解されたコードを編集し、(編集されたコードを使用して).classファイルを再作成します。
java - antからjavapを実行する方法
antスクリプトからjavapコマンドを実行したい。JavapコマンドはJDKの下のbinフォルダーにありますが、antスクリプトでJDKパスにアクセスするにはどうすればよいですか?$ {java.home}はJDKではなくJREを指しているため、役に立ちません。
私は、PATHの変更や、JAVA_HOMEなどの他の環境変数の設定など、システムの構成を必要としないソリューションを探しています。Windowsでのみ機能するソリューションで問題ありません。
java - DOSでのjavaコマンド
javap java.lang.Objectを使用すると、その下にあるメソッドのシグネチャを確認できますが、javapjavax.servlet.ServletConfigを使用すると表示できません。
javax.servlet.ServletConfigのメソッドシグネチャをチェックするためのコマンドを提案してください。
java - 同じ jar ファイルに対して、私の javap 出力があなたのものと異なるのはなぜですか?
jline-0.9.94 に依存する Maven を持つコードのコンパイルに問題があります。具体的には、デフォルトの Ant ターゲットを使用してGroovy 1.7.6をコンパイルすると、次のエラーが発生します。
jline の依存関係は正しく解決されていますが、不思議なことに setDefaultPrompt メソッドが jar に存在していないようです。
(他のメソッドも javap 出力から欠落しているように見えますが、setDefaultPrompt は私のビルドを壊すものです。)
ローカルの Maven リポジトリから jline を消去して再試行しましたが、役に立ちませんでした。Maven Centralの jline jarfileと同じ結果のミラーもチェックしました。
奇妙なことに、jar ファイルを別のマシン (Sun) にコピーして、まったく同じ手順を実行すると、jar ファイルに setDefaultPrompt メソッドが期待どおりに表示されます。他の人は、Mac でも同じ手順を実行して成功しています。
私のマシンで、Java ツールチェーンが jar ファイルに含まれるメソッドを認識できない原因は何ですか?
java - 「javap」の「p」は何の略ですか?
「javap」の「p」は何の略ですか? (「javac」の「c」はコンパイラーを表します)
java - 定数プールの javap の出力を理解する
非常に単純な HelloWorld アプリケーションで javap を実行すると、定数プールに関する出力に混乱が生じます。
テストコード
Javap -c -verbose 出力 (省略)
3 行目で、#22 を介して "hello world" 定数がスタックにプッシュされていますが、const #23 は実際の値を保持しているようです。プリントアウトの右側に表示される #(数字) が何を意味するのか、少し混乱していると思います。
Javap に関する Oracle/Sun の man ページには、まだ十分とは言えない点がたくさんあります。
java - Java 1.5 と 1.5.0_06 でコンパイルされたクラスに違いはありますか
Java バージョン 1.5 でクラスをコンパイルしました。
サーバーにデプロイすると、バージョンが正しくないというエラーが表示されました。
サーバーにバージョン1.5.0_06のJavaがある場合、Javaバージョン1.5.0_06でコンパイルすると違いがあります
1.バージョンの最後の数字も違いますか??
2. マイナーバージョンとメジャーバージョンを教えてくれますが、クラスがどのアップデートでコンパイルされているかを知る方法は??javap -verbose ClassName
ありがとう、サンディープ