- ベストアンサー
Linuxでのdumpで分からない所があります
- CentOS6を利用してバイナリデータの逆アセンブリに挑戦中です
- objdumpを使って逆アセンブリを試みていますが、結果が言語やコンピューターによって異なることがわかりました
- HITACHIのH8Sに合わせた逆アセンブリをするための追加のコマンドやツールはあるのか、よく理解できていません
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
なるほど。分かりました。 make -f MAKEFILE.GCC LINK.C=gcc とコマンドを打てば成功すると思います。 「make: g++: コマンドが見つかりませんでした」は、こちらの環境に gcc-c++ というパッケージがインストールされていて、そちらになかったために起きています。 「make: makefile.gcc: そのようなファイルやディレクトリはありません」は、解凍方法の違いでファイル名の大文字小文字が違ったためでしょう。こちらでは rpmforge からインストールした lha を使って、 CentOS 上で解凍したのでファイル名が全て小文字でした。
その他の回答 (3)
少なくとも make コマンドは実行できて、makefile.gcc も正常に読み込まれているようですね。大文字でコマンドを打つ必要はありません。 > 「makeするルールがありません」と返されてしまします。 エラーメッセージは、「make: *** ターゲット `~' を make するルールがありません. 中止.」ではないでしょうか。「~」の部分がどうなっているか分からないので以下は推測です。 dasmh83.c と oph8300h.h というソースファイルがあるはずですが、ファイル名が変わっていないでしょうか。大文字になっていたら小文字に直してください。あるいは makefile.gcc の内容を書き換えていないでしょうか。今のところ、他にエラーの原因は思い当たりません。
補足
再度、補足頂きまして、ありがとうございます。 ソースファイルの名前が大文字でしたので、小文字に直しました。 makefile.gccの内容は、変更しておりません。 ソースファイルの名前を小文字に変更して、下記を実行しました。 【1】小文字で打つと、~の部分は、"makefile.gcc" と記載され、エラー。 【2】小文字でダメだったので、MAKEFILE.GCCと試しに大文字で打つと、makeが実行されました。 【2】でmakeが実行されたのですが、下記のようなエラーを返されました。(念のため、lsから表記しております。) [SRC]# ls MAKEFILE.GCC MAKEFILE.LSI S2BIN.C dasmh83.c oph8300h.h [SRC]# make -f MAKEFILE.GCC cc -O -fomit-frame-pointer -fstrength-reduce -Wall -c -o dasmh83.o dasmh83.c g++ dasmh83.o -o dasmh83 make: g++: コマンドが見つかりませんでした make: *** [dasmh83] エラー 127 [SRC]# make -f makefile.gcc make: makefile.gcc: そのようなファイルやディレクトリはありません make: *** ターゲット `makefile.gcc' を make するルールがありません. 中止. [SRC]# 気になっている点があるのですが、123行目の変更に自信がありません。 struct MEMPOOL *mempool; fcb.pgmfile = filename; fcb.ifd = open(filename, O_RDONLY); ←ここの行ですよね? if (fcb.ifd == -1) { perror(filename); exit(2); 間違っていなければ良いのですが… 申し訳ありませんが、ご教授のほど、よろしくお願いします。
i8086やi386, x86-64はインテルのCPUを指す名前ですね。少なくとも CentOS 6 (x64) の objdump には、H8S を出力するオプションは見あたりません。この objdump では H8S のバイナリデータを逆アセンブルできないでしょう。 dasmh83 というプログラムを試してみてはいかがでしょう。参考URLで見つけた H8S 用の逆アセンブラです。本来はMS-DOS用プログラムですが、ソースコードと GNU C 用のMakefileも付属しており、少し手直ししたら CentOS6 でも付属サンプルのバイナリデータを逆アセンブルできました。 lhaコマンドを追加インストールしておき、参考URLからダウンロードした dasmh83.lzh を展開します。 lha x dasmh83.lzh さらに展開された src.lzh を展開します。 lha x src.lzh そして展開されたソースファイル dasmh83.c を次のように直しました。 30行目「#include <io.h>」を「#include <unistd.h>」に変更。 123行目「 | O_BINARY」の部分を削除。 ソースコード中の全ての「strnicmp」を「strncmp」に置き換え。 コマンドラインから make -f makefile.gcc を実行すると、dasmh83 というプログラムができあがります。 マニュアルは展開されたファイルの中に含まれています。
補足
とても詳しい内容を頂き、ありがとうございます。 回答1様でも、かなりのヒントになり、更に深い部分で勉強になります。 各ダウンロード、解凍、ソースファイルの変更・保存と順調に進むことができました。 makeのコマンドラインで、makeファイルの実行で、躓きました。 「makeするルールがありません」と返されてしまします。 ディレクトリ「SRC」にいるのですが、make実行できずにいます。 hoge/SRC # make -f makefile.gcc としています。念のため、大文字でコマンドラインを打ってみても同じでした。 単純なミスか、makeの実行ファイルなどのような気もしますが…
- wormhole
- ベストアンサー率28% (1626/5665)
やろうとされていることがいまいちわからないのですが >例: ># objdump -m i386 -b binary -D > dumphogehoge.txt もしかして上記の例は、binaryをi386用に逆アセンブルすると思ってますか? もし、そう思ってらっしゃるのなら上記の-m i386はbinaryがi386のバイナリファイルということをobjdumpに教えてるだけですよ。 当然教えてるだけなので嘘で別のアーキテクチャのCPUとも教える事はできます(意味のない逆アセンブルになるだけですが) >例えば、HITACHIのH8Sに合わせて、逆アセンブリをしたいなどの場合は、追加のコマンドがあるのでしょうか。それとも、ツールを使わないとダメなのでしょうか。 objdump --helpで表示されるサポートアーキテクチャにH8Sが含まれていないのであれば、そのobjdumpではできませんね。 GNU binutils(objdumpはこの一部です)は色々なCPUアーキテクチャをサポートしてますがlinuxのディストリビューションが提供しているobjdumpは、その全てがサポート状態になってるとは限りませんから。 ただしクロスコンパイル用に別に用意してあったりすることはあります。
補足
早速のご指摘ありがとうございます。 >もし、そう思ってらっしゃるのなら上記の-m i386はbinaryがi386のバイナリファイルということをobjdumpに教えてるだけですよ。 まさしくその通りでした。なにぶん、始めたばかりで構文例をそのまま書いたりしていますので、詳細を頂けて、理解することができました。 >objdump --helpで表示されるサポートアーキテクチャにH8Sが含まれていないのであれば、そのobjdumpではできませんね。 確認しましたところ、当然、入っておりませんでした。 厳しくも、ヒントを随所に頂き、どうしなければならないのか、イメージすることができました。 大変感謝いたします、ありがとうございます。
お礼
ulisrt様 確認、チェック起動してみたら、全て動かすことができました! 最終的に、gcc-c++というパッケージも、今後の為に必要かと思い、yum installでインストールしました。 本来ですと、ソースからインストールすることで、linuxも理解が深まるところかと思いますが、未熟なもので、便利なyumを使いました。 ですので、LINK.C=gccを追加せずに、makeすることができました。 実行も問題なくでき、逆アセンブルのコードを出力することができました。 本当にありがとうございました。 なぜ、あのようなソースに改造しなくてはいけないのか、ソースの改造点のポイントも知りたかったのですが、この点については、自分でも頭悩ませながら学んでみたいと思います。 wormhole様もご回答を頂き、無事ここに解決しましたので、御礼申し上げます。