[過去ログ] 逆コンパイラCodeReverseを作る (376レス)
1-

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

CodeReverse公式サイト
外部リンク:katahiromz.web.fc2.com

GitHubレポジトリはこちら
外部リンク:github.com
250: 片山博文MZ ◆T6xkBnTXz7B0 2015/02/15(日)13:18 ID:YOxjOULg(1) AAS
Win32 APIのほとんどの型情報が抽出できた! K点越え!

外部リンク:github.com
251: 2015/02/15(日)13:30 ID:VI4OFusP(1) AAS
おうがんばれや
252: 2015/02/15(日)17:20 ID:BzeQi2NL(1) AAS
へえ。結構やるじゃん。
253: 片山博文MZ ◆T6xkBnTXz7B0 2015/02/20(金)04:31 ID:hFZMHbko(1) AAS
今、リファクタリングとDBのサニタイズしてるとこ。いくつかサイズの間違いを見つけた。
構造体のサイズを正確に得るには、アライメントを考慮せねば。
254: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/01(日)19:08 ID:b/Z6wEyz(1) AAS
A「では、進捗報告を」
B「アライメントの扱いに案外手こずり、まだDBのサニタイズが終わっていません」
A「時間が掛かりすぎだ!いつになったらできるんだ!(机を叩く)」
B「申し訳ございません。」
A「アライメントの規則性を分析して早くサニタイズしなさい」
B「御意」
255: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/04(水)12:32 ID:wAAd8cV7(1) AAS
サニタイズ完了。
外部リンク:github.com
256: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/05(木)21:51 ID:rUbEobY5(1) AAS
型情報のload/saveを可能にしなきゃ。
定数の"typed value"計算を可能にしなきゃ。
257: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/06(金)16:43 ID:Utx2vhNJ(1) AAS
今、typed valueの実装をやってるけど、型によって場合分けが
必要だから、「場合分けの化け物」になっちゃうんだよな。
関数型ならもっとスマートに書けそうだが。。。
258: 2015/03/14(土)20:28 ID:V/kJuq3g(1) AAS
2ちゃんねるおわた
NEXT行きましょ
NEXT
259: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/15(日)13:48 ID:wj0oyall(1) AAS
マクロから一部の定数を抜き出すのを実装してみた。
定数全部を抽出するには、
マクロの展開とパースとtyped valueの実装が必要みたいだ。

外部リンク:github.com
260: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/19(木)13:04 ID:JLKczW+H(1) AAS
typed valueを実装してみた。サニタイズ失敗。
typed value実装のどこかに間違いがあるようだ。
外部リンク:github.com
261: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/19(木)15:29 ID:rGfQi3lS(1) AAS
バグ発見。ケアレスミスだった。
262: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/22(日)14:04 ID:0xruUqhc(1) AAS
typed value実装を修正。
外部リンク:github.com

次は、マクロ展開を実装します。
263: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/23(月)17:04 ID:iTA2cPA1(1) AAS
A「では、進捗報告を」
B「後はマクロ展開を実装すれば、次のステージに進めます。」
A「それはできるのか?」
B「今、QZというハッカーにマクロ展開実装を依頼していますが、
返答がありません。何とか自力でできないか模索している処です」
A「来週の日曜日までに急いでやれ。頼んだぞ」
264: 2015/03/24(火)01:57 ID:CghrDXfy(1) AAS
まあ頑張れ、せいぜい利用させてもらうぜオッサン
265
(1): 2015/03/25(水)08:14 ID:UQSzKjlW(1) AAS
俺の興味がどこにあるかお前はよく知っているはずだが?
あの証明は飛躍があるから埋めておけ参考書もそうならその参考書は捨てたほうがいい
266: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/25(水)13:24 ID:9WKHQtB7(1) AAS
>>265
名を名乗れよ
267
(1): 2015/03/25(水)18:23 ID:0ab+jORs(1/3) AAS
敗北宣言乙www
268: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/25(水)18:38 ID:0It7vtDM(1/3) AAS
>>267
御前誰だよ
269: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/25(水)20:18 ID:0It7vtDM(2/3) AAS
宿題スレを荒らしてたのは俺じゃねーぜ。勘違いするな、Qzさん
270: 2015/03/25(水)21:57 ID:0ab+jORs(2/3) AAS
反応を待たずにレスをして何を焦っているのかな?www
271: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/25(水)22:43 ID:0It7vtDM(3/3) AAS
あの宿題はQzが居なくてもできるよ
272: 2015/03/25(水)23:56 ID:0ab+jORs(3/3) AAS
ちゃんと"さん"をつけろよ若僧
273: 2015/03/26(木)00:14 ID:by79hXzC(1) AAS
before: 宿題スレを荒らしてたのは俺じゃねーぜ。勘違いするな、Qzさん
     v
after:あの宿題はQzが居なくてもできるよ

ウリのすぐバレる嘘ニダwww
274: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/26(木)01:50 ID:H3hSXcrb(1) AAS
少なくともお下品な発言はしていない。
275: 2015/03/26(木)02:31 ID:KfdRsObn(1) AAS
Qzさんだって下品な発言はしないし、大体お前のようにすぐバレる嘘をつくほどマヌケじゃない。
276: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/29(日)17:36 ID:v4NwZmHf(1/2) AAS
マクロ展開ができた。サニタイズは時間切れ。
バグがまだたくさんあるものと思われる。

外部リンク:github.com
277: 片山博文MZ ◆T6xkBnTXz7B0 2015/03/29(日)17:39 ID:v4NwZmHf(2/2) AAS
マクロ定数が正しく読み込めなければ、Win32 APIとは言えないので、
何とかがんばっているところ。
278: 片山博文MZ ◆T6xkBnTXz7B0 2015/04/01(水)13:41 ID:bTV2IHQs(1/2) AAS
2015年4月1日
Wonders API公開。
(動画) こんにちは、Wonders APIです
動画リンク[YouTube]
(Movie) Hello, this is Wonders API.
動画リンク[YouTube]
公式サイト
外部リンク:katahiromz.esy.es
GitHubレポジトリ
外部リンク:github.com
279: 片山博文MZ ◆T6xkBnTXz7B0 2015/04/01(水)13:55 ID:bTV2IHQs(2/2) AAS
いざ、第二ステージへ進め
280: 2015/04/03(金)23:48 ID:Nu5+KNg9(1) AAS
がんばれー

このスレから出てこないでね^^
281: 2015/04/04(土)00:02 ID:vxW5Ds1X(1) AAS
47氏は崇拝されていたが、片山は軽蔑される
人格上の問題なのではないか?
282: 2015/04/04(土)18:35 ID:AbppvLIl(1) AAS
片山ウザい氏ね
283: 2015/04/08(水)00:10 ID:yyUMrqSU(1) AAS
こいつがあちことで出没するとスレが過疎るからやめてほしい
284: 片山博文MZ ◆T6xkBnTXz7B0 2015/04/08(水)22:14 ID:GMSIP3gO(1) AAS
約束のdeadlineは五月一日。それまでにWonders API Webを完成しないといけない。
285: 片山博文MZ ◆T6xkBnTXz7B0 2015/04/11(土)21:01 ID:ArDgKFW5(1) AAS
今、複合値とデータのバイナリーダンプのサポートに取り組
んでいるところ。明日、リリースの予定。
286: 片山博文MZ ◆T6xkBnTXz7B0 2015/04/12(日)16:04 ID:W8Ttx0kU(1) AAS
Wonders API
外部リンク:katahiromz.esy.es

予告どおり「複合値」をサポート。変数のバイナリーダンプも可能。
287: 片山博文MZ ◆T6xkBnTXz7B0 2015/04/12(日)17:44 ID:Q9tFpytA(1) AAS
Wonders API
外部リンク:katahiromz.esy.es

まずは、Windows APIをPHPとPythonとRubyへ移植する。
288: 片山博文MZ ◆T6xkBnTXz7B0 2015/04/19(日)19:24 ID:Kws6M3Sz(1) AAS
株価が下がってる。動かない方がいいかな。
289: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/02(土)19:19 ID:gAnCVUja(1) AAS
Wonders APIをCodeReverseに取り込んで、CodeReverseのCパース箇所を破棄だ。
これでCodeReverseで型情報が使える。
GWにネットカフェが空いてないから、更新が遅くなるかも。
290: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/03(日)10:32 ID:EPJ3sWKW(1) AAS
よし、x86アセンブリを読みまくって勉強するぜ!
291: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/05(火)13:34 ID:p1RbtT4Y(1/6) AAS
CPU貸そうか?
292: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/05(火)17:34 ID:p1RbtT4Y(2/6) AAS
CPUレジスターや仮想的なアドレス空間の任意の抽象的な場所にアクセスするための全射なアドレスを文字列で表現する。
expressed address、略してexpr_addr。
expr_addrを解決すると未知の値、シンボル、もしくは具体的な値が得られる。
また、expr_addrから型の集合への写像を作ることができる。
293: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/05(火)17:47 ID:p1RbtT4Y(3/6) AAS
値の集合とシンボルの集合と型の集合が存在する。
値やシンボルはその格納場所(storage)によって類別できる。
格納場所は、スタック、ヒープ、レジスター、実行可能コード領域、その他のデータ領域などが挙げられる。
expr_addrから値やシンボルへの写像が存在する。
expr_addrから格納場所への写像が存在する。
294: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/05(火)18:06 ID:p1RbtT4Y(4/6) AAS
では、expr_addrの具体的な定義を決めよう。
(ea.1) expr_addrが数値ならばexpr_addrはexpr_addrが表す値の仮想アドレスを指し示す。
(ea.2) expr_addrがレジスターの名前ならばexpr_addrはそのレジスターの値が表す仮想アドレスを指す。
(ea.3) expr_addrが__cr.xxx[yy]といった文字列ならば、__cr.の後のxxxはストレージの名前であり、expr_addrはストレージxxxの(yy+1)バイト目を指し示す。
ここに、yyはexpr_addrである。
(ea.4) expr_addrに演算子+,-,*が含まれていれば、普通にexpr_addr上で足し算、引き算、掛け算を行う。
295
(1): 片山博文MZ ◆T6xkBnTXz7B0 2015/05/05(火)18:49 ID:p1RbtT4Y(5/6) AAS
x86/x64のスタックは逆向きに成長するから、__cr.stackは特別扱いしなければならない。
296: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/05(火)19:59 ID:p1RbtT4Y(6/6) AAS
>>295は間違い。昔はメモリーをけちるのが常だったが、
今となっては、スタックサイズ100KBくらいけちる必要はない。
たとえ失敗してもスタックサイズが可変ならば、やり直せばいい。
297: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/06(水)22:49 ID:ROM3ZfOK(1/4) AAS
コンパイラーなら型情報と構文に基づいてレジスター割り付けを行って、アセンブリを出力する。
逆コンパイラーはアセンブリから、オペランドと仮想アドレスに仮想的な値と
型を割り付け、それらを定数・変数・実引数・仮引数に抽象化し、式と構文を構築し、ソースを出力する。
298: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/06(水)23:19 ID:ROM3ZfOK(2/4) AAS
callの引数は関数アドレスであるから、それがAPI関数であれば、実引数や戻り値に型情報を付加できる。
代入においては同一の値になるオペランドが現れる。このとき、型も同一になる可能性が高い。
このようにオペランドや仮想アドレスやレジスターに型情報を再帰的に付加していく。
299: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/06(水)23:32 ID:ROM3ZfOK(3/4) AAS
仮想アドレス空間の状態は、プログラムの進行に従って遷移していく。
状態が変わる様子を再現するには、仮想マシンを作って動かしてみるのが、一番合理的だ。
300: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/06(水)23:42 ID:ROM3ZfOK(4/4) AAS
仮想マシンを動かすなら、アセンブリか中間言語のどちらのレイヤーで動かすべきか?
中間言語で動かすならば、アセンブリの情報をほとんどすべて中間言語に移行しなければならない。
301: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/07(木)14:46 ID:Eo5kGFlR(1) AAS
GW明けて、ひさしぶりに更新。

CodeReverse
外部リンク:github.com
Wonders API
外部リンク:katahiromz.esy.es
302: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/08(金)19:46 ID://zzhYF7(1) AAS
両方のレイヤーでやれってか? なら、2種類の仮想マシンを作らにゃあかんべえ。んだんだ。
303: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/09(土)02:41 ID:IBcmzD7P(1/2) AAS
要件定義はもっと数学的に。。。
304: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/09(土)19:04 ID:IBcmzD7P(2/2) AAS
要件定義をよく考えると、中間言語パーサーは不必要と判断した。
305: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/10(日)15:22 ID:DYHSUNsH(1/3) AAS
いや、中間言語パーサーは必要。パーサーがなければ、アセンブリのでっかいアーキテクチャを
ハードコーディングしなきゃいけなくなる。恐らく中間言語はアトリビュートベースになる。
306: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/10(日)15:52 ID:DYHSUNsH(2/3) AAS
中間言語では、新しい値ができるたびに明示的にそのインスタンスを宣言する。
インスタンスは型情報、入出力に関する情報、値やアドレスを表す式などの属性を持つ。
307: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/10(日)23:19 ID:DYHSUNsH(3/3) AAS
アーキテクチャを中間言語のデータで表現しないといけない。
中間言語の設計も完成していないのに。。。!
308: 片山博文MZ社外取補 ◆T6xkBnTXz7B0 2015/05/15(金)19:04 ID:hBLf1mma(1) AAS
たぶん、値を宣言してそれらに変数を割り当ててくという考え方は間違ってない。
これでうまく行きそうだ。
309: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/17(日)16:50 ID:9xJgx9ER(1) AAS
外部リンク:github.com

ファイルarch_x32.datを追加した。
このファイルにx86アセンブリから中間コードへの変換方法を記述する。
不完全。
310: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/18(月)23:19 ID:GE/vKBW3(1) AAS
我に力と自由時間を与えたまえ!(画面がパパっと2回点滅)
311: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/21(木)17:40 ID:Dn/bDwTc(1) AAS
きれいなデータ作るの大変だ。。。
312: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/24(日)10:54 ID:DJktPktd(1/2) AAS
外部リンク:github.com

アセンブリを基本ブロックに分解できた。
次は、アセンブリを中間言語に翻訳する。
313: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/24(日)11:08 ID:DJktPktd(2/2) AAS
トップにarch_x86.dat/arch_x64.datという二つのファイルを用意したから、
これを元にして、アセンブリを中間言語に逐次翻訳する。
翻訳方法は、基本的にパターンマッチを基本とする。
314: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/24(日)17:02 ID:tHPLTcxB(1) AAS
翻訳の戦略について。
まず、前述の翻訳辞書データを読み込み、パースする。
次に全体を走査して、邪魔者を消す。nopやmov ax,axやlea eax,[eax]の
ような、人間にとって無意味な命令を全部取り除く。
さらに全体を走査して、技巧的な命令を「標準語」に直す。
さらにさらに逐次的にパターンマッチしたものを次々と翻訳していく。
この戦略がうまく行けば、アセンブリはすべて中間言語に翻訳される。
315: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/25(月)13:43 ID:IMA5vj+0(1/3) AAS
外部リンク:github.com

流れグラフができた。リーダーのみ、ラベルを出力するようにした。
CR_ICode32, CR_ICode64を追加した。中間言語の定義とパースに移る。
316
(1): 片山博文MZ ◆T6xkBnTXz7B0 2015/05/25(月)14:34 ID:IMA5vj+0(2/3) AAS
こういう翻訳処理の過程は、「ステージ」という考え方でとらえるとわかりやすい。
たとえば、ステージ0が逆アセンブルしていない状態。
ステージ1が逆アセンブルした状態。ステージ2が中間言語に翻訳された状態。

ステージ0→ステージ1→ステージ2→...

逆アセンブルしていないコードが現れた場合などでは、その部分ではステージを戻って処理しないといけない。
317: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/25(月)15:12 ID:IMA5vj+0(3/3) AAS
外部リンク:github.com

>>316の考え方に基づいて、CR_DecompInfo32::GetFuncStageを追加した。
DisAsm32の前処理をPrepareForDisAsm32に分離した。
318: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/25(月)17:28 ID:LQzNccs7(1) AAS
本格的なプログラム言語の設計は初めてだが、やれることはやってみよう。
319: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/26(火)20:34 ID:4TU/edTg(1) AAS
アドレッシングの複雑性を乗り越えてオペランドをパターンマッチするんだ!!!
320
(1): 2015/05/29(金)14:46 ID:08TmNpAe(1) AAS
中間状態をベタテキストで表現する気か
321: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/29(金)14:59 ID:huri9Ebb(1) AAS
外部リンク:github.com

Coding.cppにCrParamPatternMatchを追加した。
CrParamPatternMatchはパラメーターの抽象化されたコードの
パターンマッチを行う重要な関数だ。
>>320 仮想化のため。
322: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/31(日)13:09 ID:7/EzM6AH(1/2) AAS
外部リンク:github.com

CodeReverse.hをCommon.hに改名。Testing.cppを追加。
Testing.cppで$0, $1, ...のパターンマッチを実証。
中間言語の名前がiCodeに決まった。これからiCodeを具体的に設計する。
323: 片山博文MZ ◆T6xkBnTXz7B0 2015/05/31(日)13:46 ID:7/EzM6AH(2/2) AAS
他の人のコードも読んでみるか。。。

外部リンク:github.com
324: 片山博文MZ ◆T6xkBnTXz7B0 2015/06/21(日)00:15 ID:szDYpocA(1/3) AAS
Java to C++ converter面白そう
ちょっと中断して読んでみるよ
325: 片山博文MZ ◆T6xkBnTXz7B0 2015/06/21(日)00:30 ID:szDYpocA(2/3) AAS
GitHubにマルチ環境の要望があるが、アーキテクチャを仮想化・プラグイン化するのは面倒くさ。
Windows .exe以外のフォーマット知らないし。LinuxやMacって何? 今はexploitが欲しいだけ。
326: 片山博文MZ ◆T6xkBnTXz7B0 2015/06/21(日)00:38 ID:szDYpocA(3/3) AAS
分かったよ、勉強すりゃあいいんだろ? でも真夜中は監視役が居るからダメ。
パソコンはインターネットにつながってないし、家の構造が昭和時代だからな。
本当は24時間パソコンしたいんだ。
327: 2015/06/22(月)09:59 ID:Cd6p9ZPV(1) AAS
昔LightConeとかいう基地外がいたが片山とよく似ているな
スレと関係ない雑談や脈絡もない妄言とか。
328: 2015/06/24(水)06:25 ID:B9zFFoB0(1) AAS
日記スレ
329: 2015/07/21(火)01:49 ID:PRXZAEwH(1) AAS
catcher
330: 片山博文MZ ◆T6xkBnTXz7B0 2015/07/31(金)16:19 ID:VnmYQE5l(1) AAS
何か、forkやstarが増えてきたぞ。。。
やらないとまずいかな。。。
331
(1): 2015/08/11(火)23:30 ID:3zaQ4vWk(1) AAS
逆コンパイルって解が無数にあるから
例えばナイーブな逆コンパイルは、Cでアセンブラをエミュレーションすることだし
他にもインライン展開されたコードは展開後として逆コンパイルするのか
展開前として逆コンパイルするのかとか

だからなんらかの人間にとっての読みやすさを定義して
無数の解の中でなるべく読みやすい解をどれか一つ選ぶっていう風にするのが
方向性だと思った
332: 片山博文MZ ◆T6xkBnTXz7B0 2015/08/13(木)19:16 ID:TzobCxoU(1) AAS
>>331
激しく同意。
333: 2015/09/17(木)22:00 ID:8Go7kMps(1) AAS
catcher
334: 2015/09/28(月)23:38 ID:Rm5LrJSE(1) AAS
catcher
335: 2015/10/21(水)22:40 ID:jRXObvXq(1) AAS
catcher
336: 2015/12/04(金)14:02 ID:Vm+g5Kgg(1) AAS
catcher
337: 片山博文MZ ◆T6xkBnTXz7B0 2016/01/14(木)14:17 ID:H3jYOyT9(1/3) AAS
VeySicKの開発が一段落ついたのでCodeReverseの開発を再開するよ。
ひとまずゼロからCコンパイラを作ってみる。
338: 片山博文MZ ◆T6xkBnTXz7B0 2016/01/14(木)14:20 ID:H3jYOyT9(2/3) AAS
こんなことなら、大学でコンパイラの作り方を勉強しとけばよかった。
339: 片山博文MZ ◆T6xkBnTXz7B0 2016/01/14(木)19:54 ID:H3jYOyT9(3/3) AAS
きつねさんのLLVMをAmazonで買ったよ! (もちろん中古)
340: 片山博文MZ ◆T6xkBnTXz7B0 2016/01/18(月)17:06 ID:roZ5xF5Q(1) AAS
LLVMと.NETを組み合わせて何か面白いことをやれって言われてる。
341: 片山博文MZ ◆T6xkBnTXz7B0 2016/02/03(水)19:01 ID:PDk33kNH(1/4) AAS
いずれにしても、だれかが教師になって、読みやすいコードを出力するための
教育を行わないとまともな逆コンパイラは完成しない。
さらには教育にはコミュニケーションが必要。
342: 片山博文MZ ◆T6xkBnTXz7B0 2016/02/03(水)19:21 ID:PDk33kNH(2/4) AAS
逆コンパイルを数学的に考えると、
ソースコードからコンパイル結果への変換器「コンパイラ」の逆変換器を
求める問題になる。教育を行うなら、ソースコードと、実際にコンパイルした結果の対応を
学習させることになる。その対応は情報量が少ないことが望ましい。
343: 片山博文MZ ◆T6xkBnTXz7B0 2016/02/03(水)19:43 ID:PDk33kNH(3/4) AAS
大きな変換器はより小さな変換器に分解される。
LLVMの言葉で言えば、変換器はpassであり、コンパイルはpassの合成である。
であるから、これから必要な作業は、1つひとつのpassの逆変換器を
求めることである。
344: 片山博文MZ ◆T6xkBnTXz7B0 2016/02/03(水)21:14 ID:PDk33kNH(4/4) AAS
病気は我が精神を思索の森に誘ってくれる。
健全であれば気付かない事象にも出会うことができる。
今年のうちに逆コンパイラを作らねばならない。
たとえそれが世界を滅ぼす魔法でも完成させなければならない。
ボスの命令は絶対だ。
345: 片山博文MZ ◆T6xkBnTXz7B0 2016/02/20(土)20:57 ID:md57KSoZ(1) AAS
clangのソースを読み始めたよ。
CMakeの使い方を勉強しないといけない。
examplesのPrintFunctionNamesを改造してみようっと。
346: 片山博文MZ ◆T6xkBnTXz7B0 2016/02/21(日)22:29 ID:mZ9I4pVL(1) AAS
CMakeをインストール。CMakeの基本的な使い方を覚えた。
llvmを仮想Ubuntuにapt-getでインストールして、ターンエンドだ。
347: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/02(水)22:55 ID:v5tMoIR7(1) AAS
CMakeの使い方を勉強しながらテンプレートプロジェクトをいくつか
作成して、きつねさんを参考にLLVMのコマンドを何度か試してターンエンドだ。
348: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/05(土)14:29 ID:8Tx4+NgQ(1) AAS
<llvm/IR/Type.h> 型
<llvm/IR/TypeBuilder.h> 型構築器
<llvm/IR/Constant.h> <llvm/IR/Constants.h> 定数
<llvm/IR/IRBuilder.h> IR構築器
<llvm/IR/Module.h> モジュール
<llvm/IR/Function.h> 関数
<llvm/IR/BasicBlock.h> 基本ブロック
<llvm/ADT/StringRef.h> 文字列参照
<llvm/ADT/StringMap.h> 文字列マップ
<llvm/MC/MCExpr.h> MC表現
<llvm/MC/MCInst.h> MC命令
<llvm/MC/MCValue.h> MC値
<llvm/MC/MCAssembler.h> MCアセンブラ
<llvm/MC/MCDisassembler.h> MC逆アセンブラ
<llvm/Support/MemoryBuffer.h> メモリバッファ
<llvm/Support/ErrorOr.h> エラーまたは
<llvm/Support/raw_ostream.h> 生出力ストリーム
349: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/05(土)19:46 ID:niBmwPNn(1) AAS
DraperさんのFractureを解析してみるみる。。。
350: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/07(月)15:59 ID:vq5fVXSL(1) AAS
きつねさんの本は少々古く、最新版ではコマンドラインとヘッダーが
多少変わっているようだ。最新版に合わせないといけない。
また、MinGWでは動かない機能もあるようだ。
351: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/08(火)01:37 ID:dCW2/Xzy(1) AAS
$ opt -help > help.txt
多種多様なPassがあるぞ。まずはこれを解析してみるか。
MinGWで動かなかった分はCygwinで試すぞ。
352: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/10(木)19:08 ID:xtkhTFvc(1/3) AAS
最新の仮想Ubuntu32bitと64bitをVMwareにインストール。
さらにclang-3.7とllvm-3.7をそれぞれにインストールして
俺のターンは終わりだ。
353: 片山博文MZ ◆T6xkBnTXz7B0 [age] 2016/03/10(木)19:18 ID:xtkhTFvc(2/3) AAS
LLVMは型情報を完全には保持していないようだ。
Win32ではLONGとINTは同じサイズだが、それらのポインタ型は厳格に区別される。
しかしLLVM IRではどちらもi32となる。
つまり、LLVMやClangで構造体を読み込みその型をダンプしたとしても、
コンパイルできる代物にはならない。これでは逆コンパイラには
役に立たないのではないか? ここまで何か間違いがあれば、ご指摘願う。
354: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/10(木)19:46 ID:xtkhTFvc(3/3) AAS
Clangでは区別できてるんだから、LLVM IRよりも上位で保持しているはず。ならば、Clangで
構造体などの型情報をLLVM IRの上位でどのように扱っているかを調査しないといけないぞ。
355: 片山博文MZ ◆T6xkBnTXz7B0 [age] 2016/03/12(土)22:12 ID:PAxzfn3Q(1) AAS
だいぶ解析が進んで来た。
おそらくキーワードは
clang::CompilerInstance,clang::Sema,clang::ASTContext,clang::Type
だろう。clangも大変再利用しやすい模範的なデザインになっており、
これらを組み合わせればclangの改造版が比較的容易に作れると思われる。
356: 片山博文MZ ◆lx245xLQxvF1 2016/03/14(月)15:23 ID:+duuA6fB(1/2) AAS
Clang-tutorialのmakefileのllvm-configをllvm-config-3.6に変えてメイクしてみた。

tutorial1.o: 関数 `main' 内:
/mnt/hgfs/cc/LLVM/Clang-tutorial/tutorial1.cpp:53: `llvm::sys::getDefaultTargetTriple()' に対する定義されていない参照です

なぜだ。。。分からぬ。
357: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/14(月)16:17 ID:+duuA6fB(2/2) AAS
いくら優れたライブラリでも、動かないと意味ない。。。
最新版をビルドしないといけないのか。。。

LLVMとClangのビルド、めっちゃ時間かかりそう。。。
358: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/15(火)22:21 ID:zLB+iwEH(1) AAS
仮想Ubuntuのディスク容量不足でビルド失敗。35GBくらいは必要か。
最初からやり直し。VMwareよりもVirtualBoxの方が使い易そうだ。
359: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/24(木)23:29 ID:YnxOCpos(1/2) AAS
VirtualBox上の仮想UbuntuでLLVM+Clangのビルドに成功した。
これでまずはスタートラインに立てた。可能ならば後で公開する。
360: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/24(木)23:57 ID:YnxOCpos(2/2) AAS
仮想環境のためか、ビルドに五日間かかった。電気代は高い請求額が来るだろう。
現在のオッズは低いが地道に頑張る。
361
(1): 片山博文MZ ◆T6xkBnTXz7B0 2016/03/25(金)17:05 ID:C4e13KV/(1/2) AAS
Ubuntu 14.04.4 LTS (64-bit)をインストール。ディスク容量50GB以上・メモリ2GB以上。
端末およびGhest Additions(仮想の場合のみ) インストール。
メモリが少ないときは、次のようにスワップ確保。
$ sudo dd if=/dev/zero of=/swap bs=400M count=16
$ sudo mkswap /swap
$ sudo swapon /swap
$ sudo gedit /etc/fstab
「/swap swap swap defaults 0 0」の行を最後に追加。
$ cat /proc/swaps
$ sudo apt update
$ sudo apt install build-essential
$ sudo apt install linux-headers-$(uname -r)
$ sudo apt install make
$ sudo apt install automake
$ sudo apt install cmake
$ sudo apt install subversion
$ sudo apt install gdb
$ sudo apt install perl
$ sudo apt install libtool
$ sudo apt install libncurses5-dev
$ sudo apt install valgrind
$ sudo apt install zlib1g-dev
$ sudo apt install libedit-dev
$ sudo apt install texinfo
$ sudo apt install python
$ sudo apt upgrade
362: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/25(金)17:06 ID:C4e13KV/(2/2) AAS
$ cd ~
$ svn co 外部リンク:llvm.org llvm
$ cd llvm/tools
$ svn co 外部リンク:llvm.org clang
$ cd ../projects
$ svn co 外部リンク:llvm.org compiler-rt
$ svn co 外部リンク:llvm.org openmp
$ svn co 外部リンク:llvm.org libcxx
$ svn co 外部リンク:llvm.org libcxxabi
//$ svn co 外部リンク:llvm.org test-suite
//$ sudo apt uninstall llvm clang llvm-3.6 clang-3.6 llvm-3.7 clang-3.7
$ cd ~
$ mkdir llvm-build
$ cd llvm-build
$ cmake -G "Unix Makefiles" ../llvm
$ make -j1
363: 片山博文MZ ◆T6xkBnTXz7B0 2016/03/25(金)23:58 ID:ir49Z4lH(1) AAS
>>361
訂正。ビルド&インストール成功のためにはディスクは100GB以上、
メモリーは8GB以上必要と思われる。
メモリーが充分あればスワップはデフォルトでOK。
ビルド時間を短くしたければ実機でのビルド推奨。
364
(1): 2016/03/26(土)00:18 ID:tYRw55R3(1) AAS
EXEファイル全般でやろうとしているの?
まずバイナリがどの開発環境で作ったのかを固定しないと。
どちらにしろ、理論上絶望的だから逆アセンブルはできても逆コンパイルは無理だよ。
JavaのクラスファイルもJavaでコンパイルされていたら逆コンパイラでほぼ完璧なソースをだせるけども、
LLJVMを使ったC言語がソースのLLVMからJavaクラスファイルに変換した物は逆コンパイルしても、何やっているのかよく分からない回りくどいJavaソースしか出て来ない。
同じJavaクラスファイルという中間言語形式であっても、開発言語が違えば逆コンパイルは期待通りのものにはならない。
それでもJavaやC#の中間言語ファイルは情報をいっぱい持っているから逆コンパイルしやすい。
EXEで実用的な逆コンパイラとか無理無理。
時間の無駄。他のことしたほうがいいよ。
絶対にできないから。
365
(1): 片山博文MZ ◆T6xkBnTXz7B0 2016/03/27(日)23:17 ID:LtbWwOOV(1) AAS
>>364
勝算は5%ほどある。型情報抽出と型推論を実現する策略を練っているところだ。

LVMでディスクを100GBに拡張。LLVM+Clangインストール成功。
VirtualBox仮想アプライアンスのエクスポートを完了して、俺のターンエンドだ。
366: 2016/03/28(月)00:07 ID:QZ3CUIqY(1) AAS
>>365
LLVMを逆コンパイルするソフトを作ろうとしているの?
367: 片山博文MZ ◆T6xkBnTXz7B0 2016/04/09(土)18:01 ID:1rUso06b(1) AAS
臨時の仕事が入った。中断する。
368: 片山博文MZ ◆T6xkBnTXz7B0 2016/04/19(火)20:05 ID:QQhqd517(1) AAS
IMEの開発が正式に決まった。逆コンパイラの開発は、
IMEの開発が終わるまでお預けとなる。しばしお待ちを。
369: 2016/05/01(日)16:48 ID:Ej3dzybx(1) AAS
catcher
370: 2016/05/01(日)17:16 ID:tKi6j9CT(1) AAS
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
Twitterリンク:Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw

The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
1@
371: 2016/05/03(火)22:14 ID:0ryiHSlg(1) AAS
なんかすごいな
プロの人なのかな?
372: 2016/06/04(土)20:27 ID:9azu721e(1) AAS
catcher
373: 2016/07/07(木)21:15 ID:7FmYJwv7(1) AAS
catcher
374: 2016/08/01(月)21:06 ID:ltowomRu(1) AAS
catcher
375: 2016/09/01(木)11:42 ID:Hkb7T/2S(1) AAS
catcher
376: 片山博文MZ ◆T6xkBnTXz7B0 2016/10/01(土)02:07 ID:Ja0BXeAr(1) AAS
RECという優れた逆コンパイラがあるので、CodeReverseにはもはや存在価値がない。

よって、このスレは 糸冬 了 し ま す 。

皆様、有難う御座いました。再利用可。
◆◆◆スレッド終了◆◆◆
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.163s*