逆コンパイラ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/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

これより、型システムを実装する。
2014/03/10(月) 22:07:35.64
型のデータ構造とASTを構築中。。。
2014/03/11(火) 11:51:20.24
@jonigataさんのCaperが劇的に高速化されたらしいぞ!!!
github.com/jonigata/caper
152片山博文MZジェバンニ ◆T6xkBnTXz7B0
垢版 |
2014/03/13(木) 20:23:31.76ID:AgM9wxep
汗から関数を切り出すのはできた。汗コードから関数の引数の個数を判定する方法がわからない。
最近汗やってないな。。。
2014/03/14(金) 22:06:20.31ID:j99O0IvR
雑用とか色々有って忙しいんだよな。
C2EXEの作者でも降臨して手伝ってくれないかなあ〜。多分連絡取れないんだろうな。
2014/03/14(金) 22:07:44.17ID:j99O0IvR
exe2cの間違いだった。。。
2014/03/21(金) 16:00:15.28ID:15wzZBuZ
AST構築中。。。
2014/03/23(日) 18:39:59.36ID:FjLlR1KU
最適化なんてどうでもいいから、早くASTを構築しろって上司に怒鳴られた。
すなおに実装してみるか
157片山博文MZジェバンニ ◆T6xkBnTXz7B0
垢版 |
2014/04/01(火) 12:58:53.08ID:zF3pKyMj
AST構築完了。次はコンパイルだ。
http://katahiromz.web.fc2.com/mathai/cparser8.txz
2014/04/02(水) 01:48:11.12ID:DfhRYDJb
まだやってたのか
2014/04/02(水) 23:15:39.26ID:dFeJg3uF
こうして見返してみると馬鹿なコード書いてるのがわかるな。。。
書き直そう。
160片山博文MZジェバンニ ◆T6xkBnTXz7B0
垢版 |
2014/04/07(月) 14:05:00.51ID:nfj7Xkns
github.com/katahiromz/CodeReverse
更新しました。パースルーチンを追加。コードの近代化。
ライセンスをThe BSD 2-Clause Licenseに変更。
さあ、どんどん作るぞ!!!
2014/04/20(日) 10:23:49.34ID:3IIwiFaC
技術レベルの高いことやってるね。
2014/04/20(日) 17:23:11.71ID:Z/njjQP5
x86アセンブリから関数の引数のサイズを求める方法がわからない。知ってる人、教えてよ
2014/04/20(日) 20:30:04.45ID:mILxVbg/
calling convension調べろよ
2014/04/21(月) 00:20:07.86ID:fKV6ATCG
そういうのはプロジェクト立ち上げる前に解決しとくと子だろ
2014/04/30(水) 18:48:27.62ID:4dW9hwGr
catcher
2014/04/30(水) 23:08:35.10ID:yRPuq9ZX
途中何も読んでないから的外れ言ってたらすまんこまんこ
引数はPUSH最後からPUSHで行って、最後にリターンアドレスをPUSHして関数をcallする
arg3
arg2
arg1
retaddr
引数が4バイトで3つの場合、呼び出し直後のスタックはこうなる
2014/04/30(水) 23:20:48.12ID:yRPuq9ZX
関数呼び出し規約の違いは引数の分のスタック処理を誰が責任持つかの違い
__stdcallは呼び出された関数が最後にスタックを整理して返る
__cdeclは呼び出し側がpushした分だけスタックを整理する
__fastcallはcallする前にpushじゃなくて最大2つまでレジスタに値をぶっ込んでからcallする
__thiscallはcallの直前にecxにthisポインタを入れてから呼び出すが、スタック処理は_規定では_stdcallと同じ
関数内でecxにあれこれしてローカル変数っぽいのを弄ってたらなんかしらのクラス決定
__cdeclを指定されたり可変個引数だったりするメンバ関数は、thisポインタを最後にスタックに積んだ気がする
2014/05/01(木) 00:42:00.30ID:VSccnwjx
__fastcall調べたなら「スタック処理を誰が責任持つかの違い」じゃ無いことは自明だろがアホ
あとx64だとかなり様変わりする
169デフォルトの名無しさん
垢版 |
2014/05/01(木) 02:11:28.08ID:PhcFzFlz
ごめんニワカなんだすまんこまんこ
__fastcallは3つ以上引数取るときには3つめ以降の責任は__stdcallと同じだったはず
x64はほとんどレジスタで引数やりとりするんだっけ?全く詳しくないが
2014/05/01(木) 02:48:55.05ID:VSccnwjx
「引数の渡し方からしてそもそも違う」のに「誰が責任持つかの違い」に限定しなきゃいかん理由は何なんだ。
171片山博文MZバグロボ ◆T6xkBnTXz7B0
垢版 |
2014/05/01(木) 12:27:44.81ID:WY/8p/R+
v0.1.0!
https://github.com/katahiromz/CodeReverse

パースした関数のプロトタイプを出力するようになりました。
172片山博文MZバグロボ ◆T6xkBnTXz7B0
垢版 |
2014/05/01(木) 14:24:04.77ID:O61PxCRM
型システムは70%くらいできた。
アセンブリから呼び出し規約と引数のサイズを推定するオートマトンを作らないといけない。
頑張るぜ。
2014/05/01(木) 18:16:21.29ID:O61PxCRM
Amazonでドラゴンブック二冊目買おうかな
データフローを勉強したいんで
174デフォルトの名無しさん
垢版 |
2014/05/01(木) 18:37:14.14ID:O61PxCRM
買う買う光線ビーム!!!
2014/05/01(木) 19:17:47.73ID:ZMd3mcxT
こわい
2014/05/02(金) 12:19:45.40ID:fCG9D4SE
買ったぞーーーー
2014/05/02(金) 22:33:36.49ID:uljkUnkD
>>176
http://awabi.2ch.net/test/read.cgi/classical/1389828072/
178片山博文MZバグロボ ◆T6xkBnTXz7B0
垢版 |
2014/05/04(日) 13:00:24.41ID:MUZRXExp
0.1.1!
https://github.com/katahiromz/CodeReverse

型システムが85%できました。ビットフィールドが難しい。。。
2014/05/04(日) 18:25:07.84ID:6pFdiYZZ
ビットフィールド、サポート出来そう。
次はオートマトンに取り組むぞ!!!
180片山博文MZバグロボ ◆T6xkBnTXz7B0
垢版 |
2014/05/05(月) 00:10:21.23ID:vEoyNxMN
【関数呼び出しコード分析における注意点】
☆呼び出しの際、スタックを解放せずに再利用されることがある。
☆呼び出し先のアドレスがレジスタに格納されて呼び出しに使われることがある。
☆また、条件によって場合分けされて呼び出し先の異なるアドレスがレジスタに格納されて呼び出しに使われることがある。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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