マンガでよめる痔のこと・薬のこと

いつもお世話になっております。
Eclipseをはじめてまだ6日目ほどです・・・
クラスファイルを逆コンパイルしようとおもい、JadとJadClipseを導入しました。
早速設定も終えて、いざ逆コンパイルをすると、
「クラス・ファイル・エディター」
「ソースが見つかりませんでした。」
「クラス・ファイルtest01.classに添付されるソースファイルがありません」

と表示があります。これはなにか間違えた設定を行っているからなのでしょうか?どうぞ宜しくお願いします。

使用しているのは「Eclipse3.2.0」「Jad1.5.8g」「JadClipse3.2.4」
になります。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>「クラス・ファイルtest01.classに添付されるソースファイルがありません」


test01.classの素性が解らないので、残念ながら直接答えようがありません。


その前に、そもそも、JREシステムライブラリのクラスファイルのデコンパイルは
できているのでしょうか?

例えば、java.awtパッケージ内のActiveEvent.classをダブルクリックしてみてください。
JDKのソースコードをインストールしていれば、以下(1)のように表示されるかと思います。


------ (1) java.awt.ActiveEvent.classのソースコード -----------------------------
/*
* @(#)ActiveEvent.java1.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ファイル名が小文字で始まっていますし、名前も意味不明なので
その時点で、かなり怪しいのですが...)

この回答への補足

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

補足日時:2008/08/03 12:38
    • good
    • 0

>色々調べてみたのですが、



そもそもEclipseの使い方を全く理解されていないとお見受けしました。
調べるといったような次元の問題ではありません。


>本当初心者で、プログラムをはじめようとは無謀にも程がある。
>と思われると思いますが、少しずつでも出来るようになればと考えています。

まずは、書店に行ってEclipseと名の付いた書籍を2~3冊程度買って来ましょう。
そして、それを一通り読み終えた段階で、話は始まります。
どんなに才能があっても、Eclipseの専門書を入手せずに、その使い方を包括的に
理解している人間は、この世の中に一人もいないと断言します。


>どうか、お知恵をお借しくださいm(__)m

多少のお金をケチって、ネットで事を済ませられれば金銭的に得した気分になれるかもしれませんが、
現実は、多大な人生(時間)を無駄使いすることになるでしょう。


>test01というのは、サンプルプログラムをネットででDLしました。

こんな名前のサンプルプラグラムは、全く利用(応用)価値が無い事をその名前が示しています。
仮に何かの目的を持ったテストプログラムならば、かならずその目的を名前に表すからです。
こんな意味不明な名前の付いたプログラムは絶対に実行すべきではないでしょう。
デコンパイルしてみる価値も全くないといえます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/03 17:05

確証ありませんが、


コマンドプロンプトで動作するもの、
英語圏で作られたものは

1. パス中のスペース
2. 8bit以外の文字
3. 8+3形式以外のファイル名・フォルダ名

がトラブルの元になったりします。

>「ソースが見つかりませんでした。」

ということなので多分このあたりだと思われますが
該当しませんか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/03 10:36

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJADで*.jarごとデコンパイルする方法。

JADで*.jar(または*.jarを解凍した後のパッケージ構成)ごとデコンパイルはできますでしょうか。

今まではクラスファイル1つずつJADコマンドやDJでデコンパイルしていたのですが、今回デコンパイル対象があまりに数が多いため、その方法は採用したくありません。

何か良い方法(またはツール)をご存知の方、ご教示下さい。

Aベストアンサー

jar xvf test.jar
で、解凍して、
jad -o -r -sjava -dsrc **/*.class
で、同ディレクトリ以下にある全classのjavaファイルが
srcディレクトリ配下に作られます。

2ステップが面倒であればバッチファイルにするとか。
あと、試していませんが、UNIX環境では、
**/*.class → '**/*.class'
としないといけないようです。

Q日本語対応 逆コンパイラについて

 今現在jadを使ってデコンパイルしています。
 特に日本語が文字化けしていようが気にならなかったのですが、今回会社が提供してある共通部品の調査をする際、if分に日本語を使っている事がわかりました。
 会社のものですので担当者がいるはずですが、どの方に連絡を取っていいのやらわかりません。
 製品ではないので著作権その他の問題は無いはずです。

 もし、よろしければ皆さんが使用している日本語対応のjava逆コンパイラを教えていただけないでしょうか。
 (過去の質問をみましたが、URL先に遷移できなかったり、ほとんどがCのものでした。)

Aベストアンサー

jadで逆コンパイルして出力されたソースが文字化けしているとのことですが、
それは文字化けじゃなくて、Unicode表記されていることと勘違いしていませんか?

ソース中の文字定数で使用した日本語が\u????みたいな表記になっているとしたら
それがUnicode表記です。
これを通常のShift_JISなどの表記に戻したいのであれば、javacなどと一緒にJDKに付属されているnative2asciiを-reverseオプションをつけて実行すれば
元通りにできます。

>jad Test.class …Test.jadが生成
>native2ascii -reverse Test.jad > Test.java …Test.javaを生成

QEclipse「リフレッシュ」と「クリーン」の違い

Eclipseでプロジェクト「リフレッシュ」と「クリーン」がありますが、どう違うのでしょうか?

■質問背景
・Androidでエミュレータ内容が切り替わらないときがあるのですが、キャッシュか何か関係あるのかな、と思い質問しました

Aベストアンサー

Androidエミュレータはわかりません。
Eclipseでは、下記のことを指しています。
リフレッシュ→OSのファイルシステムと、Eclipseのワークスペースのファイル構造を同期すること。
クリーン→クリーンは、クリーンビルドのことでjavaのclassファイル等の成果物を削除し、コンパイルし直すこと。

QClassファイル → Javaソースプログラム

どーも、こんにちは。プログラミング初心者です。

現在Javaを使ってプログラムをしています。
JavaはJavaソースをコンパイルするとClassファイルが生成されるじゃないですか?
では逆に、ClassファイルからもとのJavaソースプログラムに変換する(?)、取り戻すことはできないのでしょうか???

もしかして無理なのかもしれませんが、これが出来ないとどうしていいか分かりません。
どうしても、ソースプログラムが見たいClassファイルがあるのです。
そんな状態なので困っています。
どなたか少しでもご存知の方は、ご一報ヨロシクお願いします!!

Aベストアンサー

プログラムからソースコードを生成するのを「デコンパイル」といいます。そのためのプログラムを「デコンパイラ」といいます。
 現在は、Jadの他にJodeなどのデコンパイラが出ていますし、Jadの応用ソフトもいろいろあるようです。デコンパイラで検索してみるといろいろと見つかりますよ。

参考URL:http://allabout.co.jp/career/java/closeup/CU20051206B/index.htm

Qjavaのクラス関係"$"について

Abc.javaでコンパイルすると、

Abc.classの他に、
Abc$1.class
Abc$2.class
が作成されます。
"$"これはどういった意味なのでしょうか?
また、何と読むのでしょうか?
ダラー?ドルマーク?

Aベストアンサー

前の回答では答えになっていなかったので補足させてもらいます。
申し訳ないです。

javaのコードをコンパイルすると、classごとにコードを機械語に翻訳したものがclassファイルとして生成されます。
しかし、ここで問題になるのが、classの中にclassがあったら(内部クラス)どうするの?ということです。
ここで同じAbc.classにするわけにはいかないので、Abc$1.classとすることでAbc.classの中にあるけど、別のクラスであることを明記的に区別しているのではないかと思われます。

QOracleで流したSQLのログを取得できますか?

ASP+Oracle9iで作られたシステムがあります。
Oracleの設定などは前任者がしており、まともな引継ぎを受けないまま私が維持運用員となりました。
現在DBからあるレコードが消えてしまい(最初から作られてない可能性もあり)、顧客からクレームがついています。
状況から考えて怪しいプログラムを調査したのですが、原因不明でした。
そこで、Oracleの方で今まで流れたSQLをログとして保存していれば手がかりがつかめるのではないかと思い、情報を探しているのですが見つからないので教えて頂きたいのです。
私はOracleの知識(管理面について)が殆どなく、Oracleを使うことはできるが、Oracleの設定がどういう状況になっているか調べることもできず、資料もありません。

1.そもそもOracleにSQLをログとして保存する機能があるのか?
2.あるとすれば、保存機能が有効になっているか、保存したファイルがどこにあるかをどこで確認できるか?

以上の点についてご存知の方、どうぞ回答よろしくお願いします。

Aベストアンサー

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができます。
  アーカイブログモードになっているかどうかは、下記で確認できます。
   SQL> select log_mode from v$database;

  また、どのアーカイブログファイルを調査するかは下記を参照すれば良いと思います。
   SQL> select name,to_char(completion_time, 'yyyy/mm/dd hh24:mi') adate from v$archived_log;

2.フラッシュバック問い合わせ
  これは初期化パラメータUNDO_MANAGEMENTがAUTOに設定されており、かつUNDO_RETENTIONが保存期間として適切に設定されている場合のみ使用できます。
  やっていることは、UNDO表領域(旧RBS用表領域)の中に残っている実行履歴を参照しています。したがって、データベース設計時にフラッシュバック問い合わせを前提としていない限り、使える可能性は低いです。

3.その他
  監査を実行していれば、実行SQLを取得できる可能性があります。
  ただし、監査レベルなどを理解しておかないと、すべてのSQLが取得されていない可能性がありますので、難しいかもしれません。

OracleのSQL実行痕跡は以下に示すものの中にあります。
ただし、それぞれの設定レベル、保存方法によって、参照できる範囲は変わります。

1.オンラインREDOログとアーカイブログ
  オンラインREDOログはすべてのOracleデータベースに存在します。
  ですが、そのREDOログのサイズとシステムのアクセス量によって保存期間は変化します。アーカイブログ設定しておけば、古いREDOログはアーカイブとして吐き出されます。
  これらは#1の方がおっしゃったLOGMINERで実行済みSQLを調査することができま...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

QEclipseでのJDBCドライバについて

Eclipse3.1でデータベース(mysql)にアクセスするプログラムを作ったのですが下記のエラーが出ます。

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

これはJDBCドライバのセットアップがうまく出来ていないからなのでしょうか?
またEclipseでは、~.jarというファイルをプロジェクトのWEB-INFのlibフォルダに入れれば使える印象があるのですが、参考書(EclipseのではなくJAVAなどの)などにあるようにTomcatのインストールフォルダ以下common/libに入れて環境変数を変更しないといけないのでしょうか?

ご存知の方教えてください、よろしくお願いします。

Aベストアンサー

WEB-INF以下に入れると実行はできるのですが、エクリプスが.javaファイルをコンパイルすることができません。projectの一覧を右クリックしてpropertyを選択し、ダイアログ右側からJava Build Pathを選択し、タグからLibrariesを選び、Add JARsボタンをおして.jarファイルを登録して下さい。
たぶんこれでコンパイルできるはずです。

Q逆コンパイルの見方について

ソースがなくて困ってJADの逆コンパイルをしてみました。
(Decompiled by Jad v1.5.8e.)以下のように結果が出ます。

public GenericApplicationForm save() throws Exception {
Connection conn = null;
TranslationEntryForm translationentryform;
initCommonInfo();
if(checkEntryContent()) {
break MISSING_BLOCK_LABEL_24;
}
translationentryform = srcform;
DBUtil.closeConnection(conn);
return transentryform;
conn = DBUtil.getConnection(srcform.getWebInfoPath());
daSaveContent(conn);
conn.commit();
ContentData();
break MISSING_BLOCK_LABEL_61;
Exception exception;
exception;
DBUtil.closeConnection(conn);
throw exception;
DBUtil.closeConnection(conn);
return srcform;
}

Break MISSING_BLOCK_LABEL とexception;並びにCloseが2箇所あるところがおかしいと思うのですが、どう読めば良いでしょうか
変な質問で申し訳ありませんが宜しく御願い致します。

ソースがなくて困ってJADの逆コンパイルをしてみました。
(Decompiled by Jad v1.5.8e.)以下のように結果が出ます。

public GenericApplicationForm save() throws Exception {
Connection conn = null;
TranslationEntryForm translationentryform;
initCommonInfo();
if(checkEntryContent()) {
break MISSING_BLOCK_LABEL_24;
}
translationentryform = srcform;
DBUtil.closeConnection(conn);
return trans...続きを読む

Aベストアンサー

jadによる逆コンパイルは100%成功するわけではないのよ。
特に元の実装が想定外の形で作られていると
こういうことが発生するわ。
余計な代入があったり、変な処理をしてたり、とかね。
逆コンパイルは、こういうときはこう復元する、ってやっているだけだから
それに当てはまらないとおかしなソースが出来上がるわ。

推測だけど
public GenericApplicationForm save() throws Exception {
Connection conn = null;
TranslationEntryForm translationentryform = null;
try {
initCommonInfo();
if(checkEntryContent()) {
} else {
translationentryform = srcform;
DBUtil.closeConnection(conn);
return transentryform;
}
conn = DBUtil.getConnection(srcform.getWebInfoPath());
daSaveContent(conn);
conn.commit();
ContentData();
} catch(Exception exception) {
DBUtil.closeConnection(conn);
throw exception;
}
DBUtil.closeConnection(conn);
return srcform;
}
こんな形だったんじゃないかしら。
まあ、こんな変な実装は普通しないと思うけど。
変数とかおかしいし。
このコードはあくまで推測よ。

jadによる逆コンパイルは100%成功するわけではないのよ。
特に元の実装が想定外の形で作られていると
こういうことが発生するわ。
余計な代入があったり、変な処理をしてたり、とかね。
逆コンパイルは、こういうときはこう復元する、ってやっているだけだから
それに当てはまらないとおかしなソースが出来上がるわ。

推測だけど
public GenericApplicationForm save() throws Exception {
Connection conn = null;
TranslationEntryForm translationentryform = null;
try {
initCommonInfo();
if...続きを読む

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。


人気Q&Aランキング