X



逆コンパイラCodeReverseを作る
■ このスレッドは過去ログ倉庫に格納されています
0326片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2015/06/21(日) 00:38:25.90ID:szDYpocA
分かったよ、勉強すりゃあいいんだろ? でも真夜中は監視役が居るからダメ。
パソコンはインターネットにつながってないし、家の構造が昭和時代だからな。
本当は24時間パソコンしたいんだ。
0327デフォルトの名無しさん
垢版 |
2015/06/22(月) 09:59:26.27ID:Cd6p9ZPV
昔LightConeとかいう基地外がいたが片山とよく似ているな
スレと関係ない雑談や脈絡もない妄言とか。
0331デフォルトの名無しさん
垢版 |
2015/08/11(火) 23:30:28.66ID:3zaQ4vWk
逆コンパイルって解が無数にあるから
例えばナイーブな逆コンパイルは、Cでアセンブラをエミュレーションすることだし
他にもインライン展開されたコードは展開後として逆コンパイルするのか
展開前として逆コンパイルするのかとか

だからなんらかの人間にとっての読みやすさを定義して
無数の解の中でなるべく読みやすい解をどれか一つ選ぶっていう風にするのが
方向性だと思った
0337片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/01/14(木) 14:17:10.78ID:H3jYOyT9
VeySicKの開発が一段落ついたのでCodeReverseの開発を再開するよ。
ひとまずゼロからCコンパイラを作ってみる。
0338片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/01/14(木) 14:20:29.77ID:H3jYOyT9
こんなことなら、大学でコンパイラの作り方を勉強しとけばよかった。
0341片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/02/03(水) 19:01:53.20ID:PDk33kNH
いずれにしても、だれかが教師になって、読みやすいコードを出力するための
教育を行わないとまともな逆コンパイラは完成しない。
さらには教育にはコミュニケーションが必要。
0342片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/02/03(水) 19:21:23.48ID:PDk33kNH
逆コンパイルを数学的に考えると、
ソースコードからコンパイル結果への変換器「コンパイラ」の逆変換器を
求める問題になる。教育を行うなら、ソースコードと、実際にコンパイルした結果の対応を
学習させることになる。その対応は情報量が少ないことが望ましい。
0343片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/02/03(水) 19:43:38.07ID:PDk33kNH
大きな変換器はより小さな変換器に分解される。
LLVMの言葉で言えば、変換器はpassであり、コンパイルはpassの合成である。
であるから、これから必要な作業は、1つひとつのpassの逆変換器を
求めることである。
0344片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/02/03(水) 21:14:45.78ID:PDk33kNH
病気は我が精神を思索の森に誘ってくれる。
健全であれば気付かない事象にも出会うことができる。
今年のうちに逆コンパイラを作らねばならない。
たとえそれが世界を滅ぼす魔法でも完成させなければならない。
ボスの命令は絶対だ。
0345片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/02/20(土) 20:57:27.23ID:md57KSoZ
clangのソースを読み始めたよ。
CMakeの使い方を勉強しないといけない。
examplesのPrintFunctionNamesを改造してみようっと。
0346片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/02/21(日) 22:29:13.22ID:mZ9I4pVL
CMakeをインストール。CMakeの基本的な使い方を覚えた。
llvmを仮想Ubuntuにapt-getでインストールして、ターンエンドだ。
0347片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/02(水) 22:55:08.79ID:v5tMoIR7
CMakeの使い方を勉強しながらテンプレートプロジェクトをいくつか
作成して、きつねさんを参考にLLVMのコマンドを何度か試してターンエンドだ。
0348片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/05(土) 14:29:14.42ID:8Tx4+NgQ
<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> 生出力ストリーム
0350片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/07(月) 15:59:21.59ID:vq5fVXSL
きつねさんの本は少々古く、最新版ではコマンドラインとヘッダーが
多少変わっているようだ。最新版に合わせないといけない。
また、MinGWでは動かない機能もあるようだ。
0351片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/08(火) 01:37:31.85ID:dCW2/Xzy
$ opt -help > help.txt
多種多様なPassがあるぞ。まずはこれを解析してみるか。
MinGWで動かなかった分はCygwinで試すぞ。
0352片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/10(木) 19:08:02.83ID:xtkhTFvc
最新の仮想Ubuntu32bitと64bitをVMwareにインストール。
さらにclang-3.7とllvm-3.7をそれぞれにインストールして
俺のターンは終わりだ。
0353片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/10(木) 19:18:26.45ID:xtkhTFvc
LLVMは型情報を完全には保持していないようだ。
Win32ではLONGとINTは同じサイズだが、それらのポインタ型は厳格に区別される。
しかしLLVM IRではどちらもi32となる。
つまり、LLVMやClangで構造体を読み込みその型をダンプしたとしても、
コンパイルできる代物にはならない。これでは逆コンパイラには
役に立たないのではないか? ここまで何か間違いがあれば、ご指摘願う。
0354片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/10(木) 19:46:26.45ID:xtkhTFvc
Clangでは区別できてるんだから、LLVM IRよりも上位で保持しているはず。ならば、Clangで
構造体などの型情報をLLVM IRの上位でどのように扱っているかを調査しないといけないぞ。
0355片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/12(土) 22:12:12.37ID:PAxzfn3Q
だいぶ解析が進んで来た。
おそらくキーワードは
clang::CompilerInstance,clang::Sema,clang::ASTContext,clang::Type
だろう。clangも大変再利用しやすい模範的なデザインになっており、
これらを組み合わせればclangの改造版が比較的容易に作れると思われる。
0356片山博文MZ ◆lx245xLQxvF1
垢版 |
2016/03/14(月) 15:23:13.72ID:+duuA6fB
Clang-tutorialのmakefileのllvm-configをllvm-config-3.6に変えてメイクしてみた。

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

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

LLVMとClangのビルド、めっちゃ時間かかりそう。。。
0358片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/15(火) 22:21:10.64ID:zLB+iwEH
仮想Ubuntuのディスク容量不足でビルド失敗。35GBくらいは必要か。
最初からやり直し。VMwareよりもVirtualBoxの方が使い易そうだ。
0359片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/24(木) 23:29:54.57ID:YnxOCpos
VirtualBox上の仮想UbuntuでLLVM+Clangのビルドに成功した。
これでまずはスタートラインに立てた。可能ならば後で公開する。
0360片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/24(木) 23:57:51.64ID:YnxOCpos
仮想環境のためか、ビルドに五日間かかった。電気代は高い請求額が来るだろう。
現在のオッズは低いが地道に頑張る。
0361片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/25(金) 17:05:52.28ID:C4e13KV/
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
0362片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/25(金) 17:06:39.06ID:C4e13KV/
$ cd ~
$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
$ cd llvm/tools
$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
$ cd ../projects
$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
$ svn co http://llvm.org/svn/llvm-project/openmp/trunk openmp
$ svn co http://llvm.org/svn/llvm-project/libcxx/trunk libcxx
$ svn co http://llvm.org/svn/llvm-project/libcxxabi/trunk libcxxabi
//$ svn co http://llvm.org/svn/llvm-project/test-suite/trunk 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
0363片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/25(金) 23:58:54.73ID:ir49Z4lH
>>361
訂正。ビルド&インストール成功のためにはディスクは100GB以上、
メモリーは8GB以上必要と思われる。
メモリーが充分あればスワップはデフォルトでOK。
ビルド時間を短くしたければ実機でのビルド推奨。
0364デフォルトの名無しさん
垢版 |
2016/03/26(土) 00:18:12.85ID:tYRw55R3
EXEファイル全般でやろうとしているの?
まずバイナリがどの開発環境で作ったのかを固定しないと。
どちらにしろ、理論上絶望的だから逆アセンブルはできても逆コンパイルは無理だよ。
JavaのクラスファイルもJavaでコンパイルされていたら逆コンパイラでほぼ完璧なソースをだせるけども、
LLJVMを使ったC言語がソースのLLVMからJavaクラスファイルに変換した物は逆コンパイルしても、何やっているのかよく分からない回りくどいJavaソースしか出て来ない。
同じJavaクラスファイルという中間言語形式であっても、開発言語が違えば逆コンパイルは期待通りのものにはならない。
それでもJavaやC#の中間言語ファイルは情報をいっぱい持っているから逆コンパイルしやすい。
EXEで実用的な逆コンパイラとか無理無理。
時間の無駄。他のことしたほうがいいよ。
絶対にできないから。
0365片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/03/27(日) 23:17:17.79ID:LtbWwOOV
>>364
勝算は5%ほどある。型情報抽出と型推論を実現する策略を練っているところだ。

LVMでディスクを100GBに拡張。LLVM+Clangインストール成功。
VirtualBox仮想アプライアンスのエクスポートを完了して、俺のターンエンドだ。
0368片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/04/19(火) 20:05:26.73ID:QQhqd517
IMEの開発が正式に決まった。逆コンパイラの開発は、
IMEの開発が終わるまでお預けとなる。しばしお待ちを。
0370デフォルトの名無しさん
垢版 |
2016/05/01(日) 17:16:58.92ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

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

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/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@
0371デフォルトの名無しさん
垢版 |
2016/05/03(火) 22:14:50.99ID:0ryiHSlg
なんかすごいな
プロの人なのかな?
0376片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2016/10/01(土) 02:07:01.64ID:Ja0BXeAr
RECという優れた逆コンパイラがあるので、CodeReverseにはもはや存在価値がない。

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

皆様、有難う御座いました。再利用可。
◆◆◆スレッド終了◆◆◆
■ このスレッドは過去ログ倉庫に格納されています

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