Pure Java dump command for LLJVM test
LLJVM実験のためのピュアJavaのdumpコマンド
2016.3.26
I made pure java dump command.
like the MS-DOS's dump command.
LLJVM is the C to Java class file converter.
(old version clang -> LLVM -> LLJVM -> Java assembly source -> Jasmin -> Java class file)
C言語でピュアJavaのdumpコマンドを作りました。
MS-DOSのdumpコマンドに近い仕様です。
ファイルをバイナリダンプして16進数で表示して右側に文字を表示します。
C言語でJava VMで動くプログラムを作ることは一般的には不可能と思われています。
LLJVMを使ってC言語からJavaプログラムを作ることができるかどうか実験する意味で作りました。
果たして、そのできはどうでしょうか。
LLJVMは古い特定バージョンのclangが出力したLLVMをJavaアセンブリ言語に変換し、JavaアセンブラのJasminでJavaクラスファイルに変換します。
実行にはLLJVM付属のC言語のランタイムライブラリのJavaクラスファイルが必要です。
Download
dump.jar(including C source , bash shell script and Windows batch file.)
dump.sh(for UNIX like OS.rename "dump" and "chmod +x dump". store dum.jar's directory)
dump.bat(for Windows.store dump.jar's directory)
Userge dump.jar
Userge:java -jar dump.jar < inputfile
Userge:java -jar dump.jar < inputfile > outputfile
Userge dump.sh/dump/dump.bat
Userge:dump inputfile
Userge:dump < inputfile
Userge:dump < inputfile > outputfile
Bad userge:dump<inputfile
Bad userge:dump< inputfile
Bad userge:dump <inputfile
LLJVM's probrems
- fopen() doesn't work.
- open() doesn't work.
- miss match argc,argv
- 新しいバージョンのclang/LLVMでは動かない。
- バイナリがLinuxしか用意されていない。
リダイレクト機能にすがる
printf()やstrcpy()は動く。
fopen()もopen()も実行時にエラーを返すのでファイル入出力ができない。
GUIライブラリもなく作れるブログラムは非常に限られる。
複数のファイルを操作したりファイルのランダムアクセスができないので残念だが全く持って実用ではない。
標準出力と標準入力はできたのでリダイレクトを使えば、ひとつのファイルをシーケンシャルに読み込んで、ひとつのファイルをシーケンシャルに書き込むことならできる。
そこでリダイレクトを使ったdumpコマンドを作った。
リダイレクト記号の < を必ず入力しないといけないのは使い勝手が悪い。
回避策のためにシェルスクリプト、バッチファイルで起動するようにしてみた。
<を自動的に入れる処理をシェルスクリプト、バッチファイルに入れた。
一応ダンプコマンドは作ることができた。
LLJVMの実用のためには
JavaクラスファイルのC言語ランタイムライブラリを修正するしかない。
私にはできない。
LLJVMのC言語とJavaの連携
C言語からJavaのメソッドを呼んだり、JavaからC言語の関数を呼んだりとかは簡単にはできなそう。
逆コンパイルしたJavaソース
Javaで書いた場合逆コンパイラで元に近い精巧なソースを復元できるが、LLJVMで作ったクラスファイルを逆コンパイルしても分かりにくく長いソースにしか復元できない。
逆コンパイルしたJavaソースを改変して機能を補うということは難しくて現実的ではなと思う。
鍋田辞書トップページ