• ベストアンサー

【Eclipse】逆コンパイルでエラーが・・・なぜでしょうか?

いつもお世話になっております。 Eclipseをはじめてまだ6日目ほどです・・・ クラスファイルを逆コンパイルしようとおもい、JadとJadClipseを導入しました。 早速設定も終えて、いざ逆コンパイルをすると、 「クラス・ファイル・エディター」 「ソースが見つかりませんでした。」 「クラス・ファイルtest01.classに添付されるソースファイルがありません」 と表示があります。これはなにか間違えた設定を行っているからなのでしょうか?どうぞ宜しくお願いします。 使用しているのは「Eclipse3.2.0」「Jad1.5.8g」「JadClipse3.2.4」 になります。

  • Java
  • 回答数3
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.2

>「クラス・ファイルtest01.classに添付されるソースファイルがありません」 test01.classの素性が解らないので、残念ながら直接答えようがありません。 その前に、そもそも、JREシステムライブラリのクラスファイルのデコンパイルは できているのでしょうか? 例えば、java.awtパッケージ内のActiveEvent.classをダブルクリックしてみてください。 JDKのソースコードをインストールしていれば、以下(1)のように表示されるかと思います。 ------ (1) java.awt.ActiveEvent.classのソースコード ----------------------------- /* * @(#)ActiveEvent.java 1.14 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.awt; /** * An interface for events that know how to dispatch themselves. * By implementing this interface an event can be placed upon the event * queue and its <code>dispatch()</code> method will be called when the event * is dispatched, using the <code>EventDispatchThread</code>. * <p> * This is a very useful mechanism for avoiding deadlocks. If * a thread is executing in a critical section (i.e., it has entered * one or more monitors), calling other synchronized code may * cause deadlocks. To avoid the potential deadlocks, an * <code>ActiveEvent</code> can be created to run the second section of * code at later time. If there is contention on the monitor, * the second thread will simply block until the first thread * has finished its work and exited its monitors. * <p> * For security reasons, it is often desirable to use an <code>ActiveEvent</code> * to avoid calling untrusted code from a critical thread. For * instance, peer implementations can use this facility to avoid * making calls into user code from a system thread. Doing so avoids * potential deadlocks and denial-of-service attacks. * * @author Timothy Prinzing * @version 1.14 11/17/05 * @since 1.2 */ public interface ActiveEvent { /** * Dispatch the event to its target, listeners of the events source, * or do whatever it is this event is supposed to do. */ public void dispatch(); } ------ (1) ここまで ---------------------------------------------------------- そこで、JadClipseの設定で、Ignore existing source チェックボックスをONにすると (または、ソースコードをインストールしていない場合は、何もせずとも) これをデコンパイルして、以下(2)のように表示されるでしょう。 ------ (2) java.awt.ActiveEvent.classのデコンパイル結果 ------------------------ /*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) radix(10) lradix(10) // Source File Name: ActiveEvent.java package java.awt; public interface ActiveEvent { public abstract void dispatch(); } /* DECOMPILATION REPORT Decompiled from: C:\Program Files\Java\jdk1.6.0_10\jre\lib\rt.jar Total time: 20 ms Jad reported messages/errors: Exit status: 0 Caught exceptions: */ ------ (2) ここまで ---------------------------------------------------------- とりあえずは、これはてきているのでしょうか? ここまでできていれば、後は、test01.classの個別の問題です。 ですから、そのtest01.classファイルがないと、回答しようがありません。 (test01.classファイル名が小文字で始まっていますし、名前も意味不明なので その時点で、かなり怪しいのですが...)

CRUNCH123
質問者

補足

申し訳御座いません。色々調べてみたのですが、パッケージエクスプローラにJREシステムライブラリを表示させる方法がわかりません。。。(/_;) test01というのは、サンプルプログラムをネットででDLしました。 その中にある、jerファイルのクラスファイルをEclipseでデコンパしたつもりでした。 iアプリを勉強しようと思っていたので、色々探していたらでてきました。 本当初心者で、プログラムをはじめようとは無謀にも程がある。と思われると思いますが、少しずつでも出来るようになればと考えています。どうか、お知恵をお借しくださいm(__)m 私も出来るだけ状況など詳しく説明したいと思います。

その他の回答 (2)

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.3

>色々調べてみたのですが、 そもそもEclipseの使い方を全く理解されていないとお見受けしました。 調べるといったような次元の問題ではありません。 >本当初心者で、プログラムをはじめようとは無謀にも程がある。 >と思われると思いますが、少しずつでも出来るようになればと考えています。 まずは、書店に行ってEclipseと名の付いた書籍を2~3冊程度買って来ましょう。 そして、それを一通り読み終えた段階で、話は始まります。 どんなに才能があっても、Eclipseの専門書を入手せずに、その使い方を包括的に 理解している人間は、この世の中に一人もいないと断言します。 >どうか、お知恵をお借しくださいm(__)m 多少のお金をケチって、ネットで事を済ませられれば金銭的に得した気分になれるかもしれませんが、 現実は、多大な人生(時間)を無駄使いすることになるでしょう。 >test01というのは、サンプルプログラムをネットででDLしました。 こんな名前のサンプルプラグラムは、全く利用(応用)価値が無い事をその名前が示しています。 仮に何かの目的を持ったテストプログラムならば、かならずその目的を名前に表すからです。 こんな意味不明な名前の付いたプログラムは絶対に実行すべきではないでしょう。 デコンパイルしてみる価値も全くないといえます。

CRUNCH123
質問者

お礼

おっしゃるとおりです。 ですが、人生の無駄って・・・(^^ゞw テストサンプルは、実際にアプリとして動くもので、よくある「HelloWorld」を表示させましょう!見たいなプログラムですw ソースファイルも実際はあるのですが、jarファイルを逆コンパイルしたく、 ただ、それを利用して、プラグインが機能するかをチェックするためにDLしたものです。 そのプログラムの内容がどうとか、こうとかではないんですよね(^^ゞ ありがとう御座いました! 近くに大きい本屋がないので、東京行ったときにでも自分にあった本でも探して見ます!

noname#65902
noname#65902
回答No.1

確証ありませんが、 コマンドプロンプトで動作するもの、 英語圏で作られたものは 1. パス中のスペース 2. 8bit以外の文字 3. 8+3形式以外のファイル名・フォルダ名 がトラブルの元になったりします。 >「ソースが見つかりませんでした。」 ということなので多分このあたりだと思われますが 該当しませんか?

CRUNCH123
質問者

お礼

回答ありがとう御座います。 確認してみたのですが、やはり、その辺りには問題はなさそうです・・(/_;) ありがとう御座います!

関連するQ&A

  • javaの逆コンパイルを防ぐ方法はありますか?

    javaの逆コンパイルを防ぐ方法はありますか? javaのクラスファイル(.class)を公開したいと思います。 しかしjadやJadClipseなどの解析ソフトを使うと、簡単にソースコードが解析されてしまいます。 逆コンパイルを防ぐ方法があれば教えて下さい。 困っています。よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 【逆コンパイル】JadEclipseの使い方

    JadとJadEclipseのプラグインを導入して、設定も全て終了したのですが、 いまいち逆コンパイルのやり方がわかりません。色々検索はしてみたのですが、設定のやり方ばかりで・・・ .jam .jarファイルがあるのですが、これを逆コンパイルしたいのですが、可能でしょうか?また、どうやってデコンパイルをすればいいのかわかりません。 最近Javaをはじめてまだまだ初心者なので面倒くさい質問かと存じますが、 どうぞよろしくお願いします。

  • eclipseのコンパイルエラーについて

    現在、Eclipse+borlandでdirectxのプログラムを作成しています。 しかし、eclipseでコンパイルをするとコンソールに ”プログラムが大きすぎてメモリに入りません”とエラーが 表示されます。 borlandでコンパイルをすると問題なく実行ファイルが生成されます。 eclipseでコンパイルする場合は、設定が必要なのでしょうか?

  • eclipse3.5 コンパイル不能

    新たにjavaファイルを作成、あるいは編集したのにかかわらず、classesフォルダーにコンパイルされなくなりました。  原因をしらべているのですがよくわかりません。ビルドパスのソースフォルダーにはblog/web-inf/srcと正しく表示されています。srcには作成したjavaファイル作られますが、なんらかの原因にてclassesフォルダーにコンパイルされていないようです。 javaファイル(srcフォルダー)→classファイル(classesフォルダー)をeclipseにて任意に設定できるのかどうかを調べていますが、それも不明です。  何か原因が思い当たる個所があれば、ご教授の程よろしくお願い申し上げます。  

  • jadによるclassファイルの逆コンパイル後の比較

    classファイルを逆コンパイル(jadを使用)して内容の比較を試みたのですが、 片方はテキトウな変数名になっていて、   String s1 = "0"; 片方は実際にソースに書かれたと思われる変数名になっています。   String nflg = "0"; これは、javacのバージョンの違い、もしくは -targetオプションの指定の 違いによるものなのでしょうか。 実際は等価な内容であるのにも関わらず、テキスト比較ではうまく比較できなくて悩んでいます。このような場合に、うまく比較する方法はありますか? もし、コンパイルに使用されたjavacのバージョンの違いによるものならば、 片方だけはソースがあるので、バージョンを合わせ再コンパイル→逆コンパイル→比較 ということができそうだと思っていますが、classファイルから、コンパイルに 使用されたされたjavacのバージョンを取得することはできるのでしょうか?

  • eclipse3.6でコンパイルできません

    (環境) ・Windows7 Home Premium(64ビット) ・Pleiades All in One C/C++3.6.1.20101025(JREあり)  →C:\eclipse36内に展開 (問題) eclipse3.6(Pleiades)でC++のソースコードがコンパイルできません (状況) ・プロジェクト新規作成時の「ツールチェーン」には「MinGW GCC」の表示があります。 ・作成したプロジェクトのプロパティにはMinGWの項目が表示されません:  プロジェクトのプロパティ画面左にある「C/C++ビルド」項目内の  「設定」を選択したところ、右画面「ツール設定」のページにMinGWの項目が表示されていません (プロジェクト「test」のソースコード「test.cpp」) #include <iostream> using namespace std; int main(){ cout << "test" << endl; } ・上記ソースコードのビルド時に 「無効なプロジェクト・パス:インクルード・パスが見つかりません」と警告が表示されます。 (C:\eclipse\workspace\test\MinGW\include) 「Debug」フォルダ内には.oファイルや.aファイルは作成されます。 ・「Debug」フォルダ内の「test.o」を「実行」すると、 >プロセス開始中のエラー。 >プログラム "C:\eclipse36\workspace\test\Debug\test.o" を実行できません: 起動失敗 >プログラム "C:\eclipse36\workspace\test\Debug\test.o" を実行できません: 起動失敗 >プログラム "C:\eclipse36\workspace\test\Debug\test.o" を実行できません: 起動失敗 と表示されます。 ・「test.o」を「デバッグ」すると、 「Target request failed: Error creating process C:\eclipse36\workspace\test\Debug\test.o, (error 193).」 と表示されます。 圧縮ファイルを展開しただけで、何もしていませんので、 どう対応して良いか、皆目見当がつきません。 既出の問題かも知れませんが、ご教示いただければ幸いです。 よろしくお願いします。

  • eclipseのコンパイル

     現在eclipse3.2を用いて開発を行っています。 表示の問題なのですが、パッケージエクスプローラーにおいて Web-INF下のclassesフォルダにあるクラスファイルがフォルダごと 見えません。 ローカルフォルダを辿っていくとフォルダとファイルが存在するのは 確かめられるのですが・・・ どうすれば表示できるのですか?(コンパイルおよび作成フォルダの設定はできています

    • ベストアンサー
    • Java
  • eclipseとantのコンパイル結果が異なる件について。

    eclipseとantのコンパイル結果が異なる件について。 coberturaの導入を検討してい原因が分からず困っています。 困っているのはcobertura自体ではなく、antでコンパイルしたクラスファイルがどうもおかしいのです。 ※antはdos上ではなく、eclipseで行いましたが、dosでも同様のようでした。 eclipseでコンパイルしたクラスファイルの半分弱のサイズになっています。 本来は同じものになるのを期待していたのですが・・・。もちろん何か私の設定ミスだと思いますので、アドバイス頂けないでしょうか。 クラス1 package sample; import java.util.Date; public class Sample1 { public void func() { Date d = new Date(); if ((d.getTime() % 2) == 0) { System.out.println("true"); } else { System.out.println("false"); } } } クラス2 package sample; import junit.framework.TestCase; public class Sample1Test extends TestCase { public void testFunc() { Sample1 s = new Sample1(); s.func(); } } build.xml(文字数の関係でコンパイルに関係ない箇所は省きました) <?xml version="1.0" encoding="Shift_JIS"?> <project name="javahelloant" default="clean" basedir="./"> <!-- プロパティ 開始 --> <!-- libがあるディレクトリ --> <property name="lib.dir" value="lib"/> <!-- ソースファイルがあるディレクトリ --> <property name="src.dir" value="src"/> <property name="test.dir" value="test"/> <!-- クラスファイルの出力先ディレクトリ --> <property name="classes.dir" value="bin"/> <property name="classes-test.dir" value="bin-test"/> <!-- プロパティ 終了 --> <!-- パス 開始 --> <path id="classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> <pathelement location="${classes.dir}"/> </path> <!-- パス 終了 --> <!-- ターゲット 開始 --> <!-- コンパイル --> <target name="compile"> <javac srcdir="${src.dir}" destdir="${classes.dir}" /> <javac srcdir="${test.dir}" destdir="${classes-test.dir}" classpathref="classpath" /> </target> </project>

    • ベストアンサー
    • Java
  • コンパイル

    普段はEclipseを使ってます。 Eclipseでは、コンパイル時に指定した出力フォルダにクラスファイルを作成します。 と、同時にソースファイルにあるjavaクラス以外のリソースも出力フォルダにコピーしてくれます。 ですが、javacでコンパイルしたときにはコピーをしてくれません。 何かオプションがあるのでしょうか?

    • ベストアンサー
    • Java
  • eclipseでのクロスコンパイル

    こんにちは。 VineLinuxでeclipseを使用し、SuperHのコンパイルをしたいのですが、初心者なもので、設定等がわかりません。 eclipseではmakeファイルを自動作成してくれるらしいですが、 その機能を使いたいのです。 (そもそも、eclipseでSHがコンパイルできるのかどうかもわからない) どなたかご存知の方、教えていただけたらありがたいです。