逆コンパイラCodeReverseを作る

■ このスレッドは過去ログ倉庫に格納されています
1片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/09/24(火) 14:58:48.34
CodeReverseは、片山博文MZが開発している、Windows用の逆アセンブラ兼ダンプツールです。
最終的には「リバーシブルな」逆コンパイラを目指しています。

CodeReverse公式サイト
http://katahiromz.web.fc2.com/codereverse/

GitHubレポジトリはこちら
https://github.com/katahiromz/CodeReverse
2013/09/26(木) 17:44:57.55
正直ね、片山さんのその技術力で
逆コンパイラじゃなくて
C#とD言語を上手く改良したような実用できる言語作ってほしい
逆コンパイラの都合のいい言語みたいな感じでもいいから。
そしたら実装も楽になるかもよ。
これ作るついでにやってみてくれないかな?
2013/09/26(木) 17:46:26.52
ネイティブC#みたいな位置づけのさ。
D言語だと正直不安定すぎて使えなさすぎなのよ
2013/09/26(木) 18:02:30.28
マングル返し
2013/09/26(木) 21:07:00.30
Microsoft C は、シリアル番号をオブジェクトファイルに
埋め込んでるってうわさ話があったな...
2013/09/26(木) 21:51:10.45
>>53
そんな速攻で検証できそうなことをわざわざするかなぁ……?
2013/09/27(金) 23:46:08.32
課題2:アドレスからスタック状態集合への写像
課題3:コンパイラの種類を判定するコード
課題4:アセンブリ命令が何を参照し、何を変更するかの情報
課題5:データ型の管理方法

これらに関して知ってることがあれば俺に教えて下さい。
2013/09/27(金) 23:57:00.28
次のリリースは、pimplで読みやすいコードになる予定。
今までの人工知能研究の全てを注ぎ込んで、頑張りますのでご声援を。
2013/10/01(火) 01:51:25.40
いや、そのレベルでいったいなにをつくるきなんだ…
58片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/01(火) 03:17:28.27
コントロールパスというのがよくわからん。単純にプロファイルするとループで無限長になってしまうよな。
掛け算と割り算のキャリーとオーバーフロー条件の違いもよくわからん。
2013/10/01(火) 11:32:44.36
前途は多難ですね
2013/10/01(火) 20:18:53.42
思った以上にレベル低過ぎてワロタw
2013/10/03(木) 03:08:46.39
ファンクタって関数ポインタより使いやすいな
62片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/07(月) 13:30:07.20
v0.0.2にバージョンアップ。

コードの整理。insn*.datファイル、mzc2mini.{h,cpp}ファイルの追加。
関数内関数の対処。
2013/10/07(月) 14:16:22.09
insnはinstructionの略でアセンブリの命令のこと。

次は、コントロールパスとスタック状態の取得に挑戦します。
2013/10/11(金) 19:27:45.10
サイドビジネスで疲れてMPがない
妙なバグがまだ取れてない
頑張るしかないか
65片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/13(日) 13:52:28.76
コントロールパスの組み合わせが無限になるバグが修正できない。
ループは排除したのに。
2013/10/13(日) 14:05:29.47
無限大じゃなかったけど、コントロールパスが768通りって多すぎないか?
2013/10/22(火) 12:20:36.64
スタックについて必死に勉強中です。
2013/10/22(火) 14:04:27.97
一進一退というか一進二退くらいになってるような
2013/10/23(水) 19:37:09.10
三値論理サイコー!!!
2013/10/24(木) 18:56:52.09
コントロールパスよりもCFGの方が重要だとわかった。目標が間違ってた。
71片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/26(土) 14:30:59.02
v0.0.4 CFGの取得が可能になりました。
72片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/10/26(土) 14:58:46.20
型情報がない状態で、レジスタとスタックの使用状況がわからないと、
関数の呼び出し規約や引数は分析できませんね。

insn16.dat/insn32.dat/insn64.datファイルに書かれているような
中間表現によって、アセンブリとC言語ソースをつなげようと
考えています。
2013/10/26(土) 15:41:05.76
定数畳み込み
http://ja.wikipedia.org/wiki/%E5%AE%9A%E6%95%B0%E7%95%B3%E3%81%BF%E8%BE%BC%E3%81%BF

疎な条件分岐を考慮した定数伝播
http://ja.wikipedia.org/wiki/%E7%96%8E%E3%81%AA%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90%E3%82%92%E8%80%83%E6%85%AE%E3%81%97%E3%81%9F%E5%AE%9A%E6%95%B0%E4%BC%9D%E6%92%AD

抽象解釈
http://ja.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E8%A7%A3%E9%87%88

大域値番号付け
http://ja.wikipedia.org/wiki/%E5%A4%A7%E5%9F%9F%E5%80%A4%E7%95%AA%E5%8F%B7%E4%BB%98%E3%81%91

共通部分式除去
http://ja.wikipedia.org/wiki/%E5%85%B1%E9%80%9A%E9%83%A8%E5%88%86%E5%BC%8F%E9%99%A4%E5%8E%BB

Partial redundancy elimination
http://en.wikipedia.org/wiki/Partial_redundancy_elimination

演算子強度低減
http://ja.wikipedia.org/wiki/%E6%BC%94%E7%AE%97%E5%AD%90%E5%BC%B7%E5%BA%A6%E4%BD%8E%E6%B8%9B

C言語の構文解析
http://www.syuhitu.org/other/cparse/cparse.html
2013/10/30(水) 20:24:40.83
逆コンパイラに興味ある人は少ないみたいだな
2013/10/30(水) 21:29:01.31
そりゃそうだ。リバースエンジニアリングってのはどちらかといえば破壊行為だし。
この板の連中はおまえの想像以上に生産的(破壊的の反対)なんだよ。
2013/10/30(水) 21:32:36.77
それ以前に「どうせ無理だろ……」と多勢が思っていることもあるだろうね
2013/10/30(水) 21:54:20.33
コンパイラが多すぎて全部はソースに変換できないって分ってからなぁ・・・
そしてコテ的に>>76
2013/10/30(水) 23:14:18.48
次は中間表現の生成をやります。
2013/10/31(木) 14:41:22.66
実用レベルに足るものは不可能とわかっているから
2013/10/31(木) 16:34:19.29
彼でも1〜2年で限定用途なら可能だろうし
5〜10年も頑張れば実用レベルのが出来るんじゃないかな?ただそれだけ頑張った見返りがあるか疑問だが。
2013/10/31(木) 22:56:48.52
MFCの劣化ライブラリも腐っているしな
2013/11/01(金) 02:38:40.90
>>80
何一つ完成させたことが無いのに?
2013/11/03(日) 11:21:11.34
>>74
興味ありますよ頑張ってください応援してます
84デフォルトの名無しさん
垢版 |
2013/11/05(火) 00:26:28.24
え、まずはコンパイラ作ってみたら?
2013/11/06(水) 05:20:59.14
しばらくスクリーンセーバーの開発に時間を割くことにします。GUIはwxを採用します。
2013/11/06(水) 09:52:43.11
MZC使えよバカ、作った人にも使われないなんてよっぽどだな(笑)
2013/11/07(木) 02:36:02.70
馬鹿がまた飽きたのかwww

こいつ本当に何一つ最後まで作れないなw
2013/11/07(木) 02:51:13.49
最後まで作らないうえに86とかどうしようもねぇな
2013/11/07(木) 03:16:18.11
仕事の合間にLinuxのスクリーンセーバーをWindowsに移植したら、海外から何件か要望が来た。
要望の多い方を優先する方針。すまない。何ならGitHubで開発に参加してくれると助かるのだが…。
2013/11/07(木) 05:56:33.83
まあ簡単な方から片付けていくのが効率的人生の鉄則ではある。
2013/11/07(木) 08:18:28.62
また偽装請負か・・・
2013/11/07(木) 09:58:06.11
解散
2013/11/09(土) 13:24:53.90
クッソワロス、やっぱり最初に言った通り途中で挫折したw

ちなみに、こいつが途中で他のを優先すると言って
また開発に戻った例は無いぞw
2013/11/13(水) 12:33:23.15
まだだ、まだ俺のスタック領域は溢れちゃいねェ
2013/11/17(日) 20:32:31.71
保守
2013/11/25(月) 22:33:11.84
catcher
2013/11/30(土) 01:37:10.38
>>50-51
Salamander
98片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2013/12/03(火) 11:45:36.02
スクリーンセーバーの移植が終わったので、CodeReverseの開発を再開します。
2013/12/05(木) 23:14:57.22
また仕事が入った
2013/12/13(金) 23:20:47.44
catcher
101デフォルトの名無しさん
垢版 |
2013/12/19(木) 04:29:33.68
Windows 系の .exe .dll を逆コンパイルするので分りやすいコードを吐いてくれるのは
今って何が高性能?
C#ぐらいの言語っぽいのだと分りやすいんだけど
2013/12/19(木) 18:50:48.68
機械語からの逆コンパイルは大抵ろくなコードが出てこない。
マトモなコードになるのは中間言語からの逆コンパイルくらいだな。
.NETやJavaやActionScriptやHSPの中間言語は結構普通の逆コンパイル結果が得られる。
103101
垢版 |
2013/12/21(土) 05:43:16.03
逆コンパイルで出てきたコードを書き換えてコンパイルしようという訳じゃないんだ。
機器のログを表示するソフトのデータ読み込みにバグがあるみたいで
自分で表示用データを出せるプログラム作ろうとしたら一部計算式が分らない
三角関数だろうけど
2013/12/21(土) 06:25:42.35
>>103
だから中間言語使った実行ファイルなら逆コンパイルも実用になるけど、
機械語使った実行ファイルの逆コンパイラはなかなか実用にならんよ。
たぶん逆アセンブラがなんだかんだ一番実用的だと思うぞ。

その.exeや.dllが中間言語使ってる実行ファイルかどうかは知らん。
.NETあたりだと逆コンパイルも楽だから.NETだといいね。
2013/12/21(土) 09:06:13.91
>>103
その機器のメーカーに直してもらえよ
106デフォルトの名無しさん
垢版 |
2013/12/21(土) 10:17:26.47
アセンブラは機械語と一対一に対応しているとよく言われるけど、
実際は対応していない。
同じアセンブリでも配置によって複数の機械語から特定のコードを選択
しなければならないプロセッサはよくありがち。
いろいろ面倒だよ。
2013/12/21(土) 13:06:51.16
>>103
ログ読み取りに不透明要素を持ちこむな 本末転倒にもほどがある
2013/12/31(火) 23:55:12.69
catcher
109デフォルトの名無しさん
垢版 |
2014/01/01(水) 03:35:02.64
>575 名前:片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/31(火) 22:44:07.54
>2013年の実績:
>クロスワードギバーを完成。
>XScreenSaverの200個以上のスクリーンセーバーをWindowsに移植。
>逆アセンブラを途中まで作成。

いつのまにか逆アセンブラにグレードダウン(笑)
なんというか、「〜をダウンロードした」とか「〜を勉強中」など
どうでもいいことは大声で宣伝するが、重要なことは何も言わないとか・・・
2014/01/02(木) 04:25:05.69
ネタギレです…しばらく保守になります。

この停滞状態が我慢できなければGitHubでPull requestしてね
2014/01/02(木) 18:37:25.91
都合が悪くなると名無しで発言するんだな、発言の内容からして本人であることは明白なんだが
2014/01/04(土) 23:27:07.00
ドラゴンプック買えばいいんですかね?
2014/01/05(日) 02:54:40.24
無駄にはならんと思うが、つまみ食い気分で買うにはちとお高いよ
114デフォルトの名無しさん
垢版 |
2014/01/08(水) 19:09:04.82
アマゾンギフト券2000円を買ったぞ
中古のドラゴンブック買うぞーー!
115片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2014/01/13(月) 16:06:36.73
ドラゴンブック、1000円くらいの中古を買っちゃった!!!!!
さあ、ドラゴンと戦うぞ!!!
116片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2014/01/16(木) 11:57:51.63
「コンパイラI原理・技法・ツール」が家に届いたぞー

戦闘開始!
117デフォルトの名無しさん
垢版 |
2014/01/16(木) 21:01:39.45
コンパイラ「ロバwwwwwwwwwwwwwwwwwwww」
2014/01/17(金) 16:33:31.45
RE: Bison Windows m4 problems
bison: cannot open file `data/m4sugar/m4sugar.m4': No such file or directory
https://lists.gnu.org/archive/html/help-bison/2010-03/msg00015.html

空白を含むC:\Program Filesにインストールしちゃ駄目らしい。やり直し。
2014/01/17(金) 16:44:20.33
これも必要
set BISON_PKGDATADIR=C:\GnuWin32\share\bison
2014/01/17(金) 17:21:08.45
報告。ドラゴン本第三章まで読了。左再帰を右再帰に直す方法を学習した。
フロントエンド、フェーズなどの用語を習得した。
GNU Win32 Bison(Yacc)+Flex(Lex)のインストールに成功した。
引き続きBison+Flexの使い方を勉強する。
121片山博文MZコスモ ◆T6xkBnTXz7B0
垢版 |
2014/01/20(月) 12:27:07.18
ここまでの学習成果をまとめました。
http://katahiromz.web.fc2.com/mathai/compiler-tech-ja.zip

次の目標は、Cパーサーの作成です。
2014/01/20(月) 12:34:03.66
あれ、逆コンパイラじゃなかったの?
フロントエンドよりバックエンドの方が重要だろう

俺が知らないうちに方針が変わったのかな
123デフォルトの名無しさん
垢版 |
2014/01/20(月) 13:35:44.73
ロバ「方針が変わったのかな」
2014/01/20(月) 14:32:20.01
どうでもいい。アホは自由だけが取り柄、好きにすればいいじゃない。
125片山博文MZ無能 ◆T6xkBnTXz7B0
垢版 |
2014/01/25(土) 13:20:17.50
C言語で連結リスト書いたよ。

連結リストライブラリ LinkedListInC
https://github.com/katahiromz/LinkedListInC
2014/01/25(土) 17:51:54.00
Cで書くべきかC++で書くべきか?
2014/01/25(土) 18:01:36.51
bison+flexで作ったパーサーを2つ以上取り込むことができないから、Cはダメだな、C++にしよう
2014/01/27(月) 17:02:56.74
ftp://sunsite.unc.edu/pub/Linux/devel/lang/c/cdecl-2.5.tar.gz

ここにcdeclというプログラムのソースがある。これを分析する。
2014/01/30(木) 22:11:39.12
最近はPEGを使うのが流行りなのか? ちょっくら調べてみるか
2014/02/10(月) 23:06:04.01
パーサジェネレータの勉強を兼ねて電卓を作ってます。
2014/02/11(火) 19:47:51.54
bison/flexのパーサーが複数使えないって
片山はマニュアルが理解できないのか
2014/02/11(火) 23:26:24.57
Windowsではまだmodern Bison++(3+)は入手できない。
それにC++に関してはまだ実験的らしい。
すぐに使えなくなりそうなコードは書きたくない。
だからANTLR3を使うことにした。
2014/02/12(水) 22:39:20.23
ドラゴンブックに挫折したか
134片山博文MZ無能 ◆T6xkBnTXz7B0
垢版 |
2014/02/16(日) 10:43:23.84
まだ挫折していません。
ANTLR3でここまですごい電卓ができました。

http://katahiromz.web.fc2.com/mathai/mzcalc3.zip
2014/02/16(日) 12:48:36.08
SS貼れよ
2014/02/16(日) 12:57:23.05
Type [q or Q] to quit
> 871263948761872364871623946182973164+8761928734912634183412379461874234
Result is: 880025877496784999055036325644847398
> s=92183019827349179203471
s := 92183019827349179203471
Result is: 92183019827349179203471
> sin(s)%100.3
Result is: 0.7484296692622107891527456053804399259219719456829430374497200718368
9079690554390091960884209113407122218168687650754654152155867
>
2014/02/18(火) 20:15:08.01
C11を勉強しなければ‥‥
2014/02/20(木) 00:45:01.32
電卓で終わる予感
2014/02/20(木) 12:37:10.33
Grammar Zoo
http://slps.github.io/zoo/
2014/02/20(木) 13:23:01.18
__extension__とか__builtin*とか処理が多いなあ。
2014/02/21(金) 16:51:09.37
ANTLRでFOLLOW_set_in_問題が発生した。これも使えないのか。。。
2014/02/22(土) 13:41:25.80
bison-3.0.2をビルドしようとしたが失敗。
CaperとPEGを試してみる。。。
2014/02/22(土) 19:42:42.68
スマポ? なにそれおいしいの?
2014/02/25(火) 16:56:09.41
Caperは生成に時間がかかる(Core i5で10分)。しかもできるものが非常にでかい。
145片山博文MZ無能 ◆T6xkBnTXz7B0
垢版 |
2014/02/28(金) 15:42:30.17
Cパーサのプロトタイプができたよ!!!!
http://katahiromz.web.fc2.com/mathai/cparser2.zip

storage class関連の文法の見直し、並びにT_TYPEDEF_NAME,
T_TYPEDEF_NAME_FIRST, T_TAGNAMEなどの特殊なトークンが必要だった。

それにしてもCaperは時間がかかりすぎ。。。やっぱりBisonが最強かなと思い始める。。。
146デフォルトの名無しさん
垢版 |
2014/02/28(金) 18:36:32.65
>>145
あんた偽物だろ。
片山先生ならなぜ時間がかかるかまで調べて教えてくれるはず。
147片山博文MZ無能 ◆T6xkBnTXz7B0
垢版 |
2014/03/02(日) 14:00:30.68
さあ、caparの高速化に挑戦するぞ。開発環境はMinGW+MSYS。
まずは、計測。
$ time ./caper.exe -c++ cparser.cpg cparser.hpp
    real 7m50.856s
    user 0m0.015s
    sys 0m0.000s
7分50秒もかかっていることがわかる。

g++のコマンドラインに-pgをつけてビルドすると、
関数の処理時間などをプロファイルするCaperの出来上がり。
    $ ./caper -c++ cparser.cpg cparser.hpp
を実行すると、ファイルgmon.outが作成される。さらに
    $ gprof caper.exe gmon.out > gmon.log
と入力すると、人間にも読めるgmon.logができる。
...(中略)...
その結果、
    real 0m31.862s
    user 0m0.000s
    sys 0m0.031s
となり、30秒程度で処理できるようになった。めでたしめでたし。
http://katahiromz.web.fc2.com/mathai/qcaper.zip
2014/03/02(日) 14:19:11.94
騙されてる
149片山博文MZジェバンニ ◆T6xkBnTXz7B0
垢版 |
2014/03/07(金) 17:53:42.51
ここまでできたぞ!!!
http://katahiromz.web.fc2.com/mathai/cparser4.txz

これより、型システムを実装する。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況