1 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :
2013/09/24(火) 14:58:48.34
5 :
デフォルトの名無しさん :2013/09/24(火) 15:02:38.62
パッと思いつくのは ・アドレスにラベルを割り付ける ・関数を切り分ける ・スタックフレームから関数引数・ローカル変数・戻り値を切り出す ・if/for/switchを抽出して構文化する ・DLLからロードされるシンボルを置き換える 解説しているサイトとかあるかは調べてないので知らん どうせ defineされた定数をマクロ名に戻せないとか 構造体復元が難しいとかあるから大したことはできん
このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
ネタスレはマ板でやれよ。 > Cの逆コンパイラはどこまで実現可能か アフィサイト晒してんじゃねーよ。 内容もちょい微妙だし。 まず、アセンブリから C/C++ へのトランスレータは簡単だろ? そっからどの程度 C/C++ らしい表現にするかが問題なんだろ? 何から手を付けてどういう順番でやるつもりなの。
8 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/09/24(火) 22:00:04.49
まずは関数の切り分け(手元では入り口を解析する形でほぼ完了)。次は関数情報とスタックフレームの解析。 そして中間表現の定義と中間表現への変換。さらに構文解析と型情報の処理。 トランスレータって言ってもそんなに簡単じゃない。 リソースのダンプでいいのないか(オープンなの)?
9 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/09/24(火) 22:13:52.02
関数には__cdecl、__stdcall、__pascal、__fastcall、単純ジャンプ関数の五種類あるんだけど、これをどうやって判別するかという問題がある。 遅延ロード情報の取り込みもしたい。ソース希望。
OllyDbgじゃダメなんか 分かってる人には充分だろ
11 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/09/24(火) 23:05:03.62
ネタスレではありません。私は本気です。明日、OllyDbgのソースをDLしてみます。 CodeReverseは、NASMのコードを一部拝借しています。 多分、構文解析用のインクルードファイルが必要になると思います。 MinGWから頂くかも知れません。ライセンスはどうするか? アイコンのデザイン、洒落てるでしょ?
できたらよんで。
>>11 > MinGWから頂くかも知れません。ライセンスはどうするか? アイコンのデザイン、洒落てるでしょ?
MinGWのソース使ったら、配布するときのライセンスはGPLになると思う。
一部パブリックドメインらしいけれど。
アムロの親父みたいに俺の親父もボケてしまった。 たしかに昔はある分野で日本一の技能をもってた。俺の目標は親父だった。 今は硬い世界の殻に閉じこもってしまって、もはや日常会話しか通じない。
うーむ、今のところこの世にまともなC/C++の逆コンパイラが 存在しない事を考えても片山程度の技術力で作れるとは思えんが・・・
ま、なんかできたらまた呼んでくれ
ヘッダファイルもプリプロセッサも要るから、単純にMinGWに寄生する形にします。 バージョンアップの度にいちいちでっかいファイルをダウンロードさせるのも不憫だから。 ライセンスはGPLになる予定です。
つーか、片山GUIはどうした?予想通り挫折したのか? そんなんじゃ逆コンパイラなんてもっと無理だろ
自動車の命はエンジンでしょ。GUIは後で自由に作れるから。
自動車の命は乗り心地だと思う
>>19 そういう問題じゃねーだろw
お前にはモノを最後まで作り上げる能力が無いって事だ
あれだけWin32APIやMFCに代わるGUIを作るって豪語してたろ
多分お前はこの逆コンパイラも作れないし、後になってもGUIも作れんよ
まあ一人で色々作ってたら未完成になることは多い。 そういう未完星人の同類なら、GUI作りくらい協力してやってもいい。 だが残念だがそれは無理だ。なぜなら彼が作っている物は俺よりしょぼい。 もはや彼が俺に「あなたのプロジェクトに協力させて下さい」と頼まなければいけないレベルなのだ。 残念である。世の中は不条理に満ちている。
まあ誰もが出来ないと思ってるよ グラフィックライブラリもこれを最後に音沙汰なしだしな 975 名前:片山博文MZパンク ◆0lBZNi.Q7evd [sage] 投稿日:2013/03/21(木) 03:21:59.90 MZC2順調に開発中。。。
順調に開発中クソワロタwww どこが順調なんだよwww
CUIの有り難みがわからない人とは話しが合わないっす。 CUIにパイプラインをつなげてGUIを作るなんてお茶の子さいさいっす。 俺はサイドビジネスで忙しいから、空いた時間で作ってるっす。 CUIの使い方も知らない人はうざいから消えてね。
出来ない人間の言い訳きたwww
ふーむ、CUIのありがたみがわかってる人間がなんでわざわざ
二番煎じのGUIを作ろうと思ったのか。しかもオリジナルより劣化してる。
更には、お茶の子さいさいと言いながら、いまだに何の成果物も出せないのはこれいかに。
>>23 のレスからもう半年も経過しているが。
俺は貴様らよりも自由じゃないから。夜遊びはできないし、インターネットに つなげてもらえないし。パソコンの使用時間は制限されてるし。 この書き込みも見張りに見つからないように携帯から書き込んでいるところ。
典型的な口だけダメ人間の末路だなw
こりゃアカンで。ちょっと期待してたらどうやら
>>1 の人格・人間性に
相当の問題アリやな。
クロスワードギバーというパズル作成ソフトで結構反響あった。MZ KeyLoggerもわりと人気あるし。
そうそう幅広くニッチなところ狙ってけ。おまえはわけのわからんものを大量に発明して東京都知事選に変態枠で出馬するようなタイプなんだ。
× 大量に発明して ○ 大量に「発明するぞ」というだけ言って
>>32 当選は枠があるけど出馬は出たきゃ出れるんじゃなかったっけ?
エクスポート名の@の右の数字は引数全体のサイズだよね?
で、__stdcallの引数全部のサイズが命令retの第一オペランドの値だよね? そして、スタックフレームはebpとespの値の増減を調べないとわからないんだよね?
キャバクラでかわいいホステスと夜遊びしたいな
>>9 は間違いね。__pascalなんてないし、64ビットに言及がないし、単純ジャンプ関数って何じゃそれ
以下、sage進行でよろしくお願いします。
片山死ねよ
>>35-36 Win32 べったりの話? 何にも知らないんだね。
DEF ファイルを使った DLL からのエクスポート
で検索してご覧、MSDN 内のページが引っかかるから。
悪いけど、主要な(少なくともターゲットとする)コンパイラやアセンブラやリンカのマニュアルを読んでから質問してくれる?
ていうかブログでやってくんない?
ブッブー、defファイルではなく__stdcall,__fastcall関数のmanglingの話でした。 manglingされたシンボル名から元の名前を求めるのは大変みたいですね。
>>43 まぁだがコンパイラ毎ではあるもののマングリングは明確な規則で行われてるわけで…
それを難しいとか言ってるようではC/C++コードへの復元とか夢のまた夢だわな。
呼び出し規約と関数内のレジスタ利用方法の規約ゴッチャにしてる辺りも残念すぎる。
45 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/09/26(木) 16:36:10.77
v0.0.1にバージョンアップしました。 関数の切り分けができるようになりました。 課題1:DisAsmメソッドの中で各関数の種類(FUNCTIONTYPE)を確定させる。 また、各関数の引数全部のサイズを求める。関数内関数の対処。
全パターンぶんデマングルしてみてうまくデマングルできたやつを採用すればいいんじゃない
PEiDでも調べれば?
正直ね、片山さんのその技術力で 逆コンパイラじゃなくて C#とD言語を上手く改良したような実用できる言語作ってほしい 逆コンパイラの都合のいい言語みたいな感じでもいいから。 そしたら実装も楽になるかもよ。 これ作るついでにやってみてくれないかな?
ネイティブC#みたいな位置づけのさ。 D言語だと正直不安定すぎて使えなさすぎなのよ
マングル返し
Microsoft C は、シリアル番号をオブジェクトファイルに 埋め込んでるってうわさ話があったな...
>>53 そんな速攻で検証できそうなことをわざわざするかなぁ……?
課題2:アドレスからスタック状態集合への写像 課題3:コンパイラの種類を判定するコード 課題4:アセンブリ命令が何を参照し、何を変更するかの情報 課題5:データ型の管理方法 これらに関して知ってることがあれば俺に教えて下さい。
次のリリースは、pimplで読みやすいコードになる予定。 今までの人工知能研究の全てを注ぎ込んで、頑張りますのでご声援を。
いや、そのレベルでいったいなにをつくるきなんだ…
58 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/01(火) 03:17:28.27
コントロールパスというのがよくわからん。単純にプロファイルするとループで無限長になってしまうよな。 掛け算と割り算のキャリーとオーバーフロー条件の違いもよくわからん。
前途は多難ですね
思った以上にレベル低過ぎてワロタw
ファンクタって関数ポインタより使いやすいな
62 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/07(月) 13:30:07.20
v0.0.2にバージョンアップ。 コードの整理。insn*.datファイル、mzc2mini.{h,cpp}ファイルの追加。 関数内関数の対処。
insnはinstructionの略でアセンブリの命令のこと。 次は、コントロールパスとスタック状態の取得に挑戦します。
サイドビジネスで疲れてMPがない 妙なバグがまだ取れてない 頑張るしかないか
65 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/10/13(日) 13:52:28.76
コントロールパスの組み合わせが無限になるバグが修正できない。 ループは排除したのに。
無限大じゃなかったけど、コントロールパスが768通りって多すぎないか?
スタックについて必死に勉強中です。
一進一退というか一進二退くらいになってるような
三値論理サイコー!!!
コントロールパスよりも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言語ソースをつなげようと 考えています。
逆コンパイラに興味ある人は少ないみたいだな
そりゃそうだ。リバースエンジニアリングってのはどちらかといえば破壊行為だし。 この板の連中はおまえの想像以上に生産的(破壊的の反対)なんだよ。
それ以前に「どうせ無理だろ……」と多勢が思っていることもあるだろうね
コンパイラが多すぎて全部はソースに変換できないって分ってからなぁ・・・
そしてコテ的に
>>76
次は中間表現の生成をやります。
実用レベルに足るものは不可能とわかっているから
彼でも1〜2年で限定用途なら可能だろうし 5〜10年も頑張れば実用レベルのが出来るんじゃないかな?ただそれだけ頑張った見返りがあるか疑問だが。
MFCの劣化ライブラリも腐っているしな
>>74 興味ありますよ頑張ってください応援してます
84 :
デフォルトの名無しさん :2013/11/05(火) 00:26:28.24
え、まずはコンパイラ作ってみたら?
しばらくスクリーンセーバーの開発に時間を割くことにします。GUIはwxを採用します。
MZC使えよバカ、作った人にも使われないなんてよっぽどだな(笑)
馬鹿がまた飽きたのかwww こいつ本当に何一つ最後まで作れないなw
最後まで作らないうえに86とかどうしようもねぇな
仕事の合間にLinuxのスクリーンセーバーをWindowsに移植したら、海外から何件か要望が来た。 要望の多い方を優先する方針。すまない。何ならGitHubで開発に参加してくれると助かるのだが…。
まあ簡単な方から片付けていくのが効率的人生の鉄則ではある。
また偽装請負か・・・
解散
クッソワロス、やっぱり最初に言った通り途中で挫折したw ちなみに、こいつが途中で他のを優先すると言って また開発に戻った例は無いぞw
まだだ、まだ俺のスタック領域は溢れちゃいねェ
保守
catcher
98 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/03(火) 11:45:36.02
スクリーンセーバーの移植が終わったので、CodeReverseの開発を再開します。
また仕事が入った
catcher
101 :
デフォルトの名無しさん :2013/12/19(木) 04:29:33.68
Windows 系の .exe .dll を逆コンパイルするので分りやすいコードを吐いてくれるのは 今って何が高性能? C#ぐらいの言語っぽいのだと分りやすいんだけど
機械語からの逆コンパイルは大抵ろくなコードが出てこない。 マトモなコードになるのは中間言語からの逆コンパイルくらいだな。 .NETやJavaやActionScriptやHSPの中間言語は結構普通の逆コンパイル結果が得られる。
103 :
101 :2013/12/21(土) 05:43:16.03
逆コンパイルで出てきたコードを書き換えてコンパイルしようという訳じゃないんだ。 機器のログを表示するソフトのデータ読み込みにバグがあるみたいで 自分で表示用データを出せるプログラム作ろうとしたら一部計算式が分らない 三角関数だろうけど
>>103 だから中間言語使った実行ファイルなら逆コンパイルも実用になるけど、
機械語使った実行ファイルの逆コンパイラはなかなか実用にならんよ。
たぶん逆アセンブラがなんだかんだ一番実用的だと思うぞ。
その.exeや.dllが中間言語使ってる実行ファイルかどうかは知らん。
.NETあたりだと逆コンパイルも楽だから.NETだといいね。
106 :
デフォルトの名無しさん :2013/12/21(土) 10:17:26.47
アセンブラは機械語と一対一に対応しているとよく言われるけど、 実際は対応していない。 同じアセンブリでも配置によって複数の機械語から特定のコードを選択 しなければならないプロセッサはよくありがち。 いろいろ面倒だよ。
>>103 ログ読み取りに不透明要素を持ちこむな 本末転倒にもほどがある
catcher
109 :
デフォルトの名無しさん :2014/01/01(水) 03:35:02.64
>575 名前:片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/31(火) 22:44:07.54 >2013年の実績: >クロスワードギバーを完成。 >XScreenSaverの200個以上のスクリーンセーバーをWindowsに移植。 >逆アセンブラを途中まで作成。 いつのまにか逆アセンブラにグレードダウン(笑) なんというか、「〜をダウンロードした」とか「〜を勉強中」など どうでもいいことは大声で宣伝するが、重要なことは何も言わないとか・・・
ネタギレです…しばらく保守になります。 この停滞状態が我慢できなければGitHubでPull requestしてね
都合が悪くなると名無しで発言するんだな、発言の内容からして本人であることは明白なんだが
ドラゴンプック買えばいいんですかね?
無駄にはならんと思うが、つまみ食い気分で買うにはちとお高いよ
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」
これも必要 set BISON_PKGDATADIR=C:\GnuWin32\share\bison
報告。ドラゴン本第三章まで読了。左再帰を右再帰に直す方法を学習した。 フロントエンド、フェーズなどの用語を習得した。 GNU Win32 Bison(Yacc)+Flex(Lex)のインストールに成功した。 引き続きBison+Flexの使い方を勉強する。
121 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2014/01/20(月) 12:27:07.18
あれ、逆コンパイラじゃなかったの? フロントエンドよりバックエンドの方が重要だろう 俺が知らないうちに方針が変わったのかな
123 :
デフォルトの名無しさん :2014/01/20(月) 13:35:44.73
ロバ「方針が変わったのかな」
どうでもいい。アホは自由だけが取り柄、好きにすればいいじゃない。
125 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/01/25(土) 13:20:17.50
Cで書くべきかC++で書くべきか?
bison+flexで作ったパーサーを2つ以上取り込むことができないから、Cはダメだな、C++にしよう
最近はPEGを使うのが流行りなのか? ちょっくら調べてみるか
パーサジェネレータの勉強を兼ねて電卓を作ってます。
bison/flexのパーサーが複数使えないって 片山はマニュアルが理解できないのか
Windowsではまだmodern Bison++(3+)は入手できない。 それにC++に関してはまだ実験的らしい。 すぐに使えなくなりそうなコードは書きたくない。 だからANTLR3を使うことにした。
ドラゴンブックに挫折したか
134 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/16(日) 10:43:23.84
SS貼れよ
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 >
C11を勉強しなければ‥‥
電卓で終わる予感
__extension__とか__builtin*とか処理が多いなあ。
ANTLRでFOLLOW_set_in_問題が発生した。これも使えないのか。。。
bison-3.0.2をビルドしようとしたが失敗。 CaperとPEGを試してみる。。。
スマポ? なにそれおいしいの?
Caperは生成に時間がかかる(Core i5で10分)。しかもできるものが非常にでかい。
145 :
片山博文MZ無能 ◆T6xkBnTXz7B0 :2014/02/28(金) 15:42:30.17
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
騙されてる
149 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/07(金) 17:53:42.51
型のデータ構造とASTを構築中。。。
@jonigataさんのCaperが劇的に高速化されたらしいぞ!!! github.com/jonigata/caper
152 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/03/13(木) 20:23:31.76 ID:AgM9wxep
汗から関数を切り出すのはできた。汗コードから関数の引数の個数を判定する方法がわからない。 最近汗やってないな。。。
雑用とか色々有って忙しいんだよな。 C2EXEの作者でも降臨して手伝ってくれないかなあ〜。多分連絡取れないんだろうな。
exe2cの間違いだった。。。
AST構築中。。。
最適化なんてどうでもいいから、早くASTを構築しろって上司に怒鳴られた。 すなおに実装してみるか
157 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/01(火) 12:58:53.08 ID:zF3pKyMj
まだやってたのか
こうして見返してみると馬鹿なコード書いてるのがわかるな。。。 書き直そう。
160 :
片山博文MZジェバンニ ◆T6xkBnTXz7B0 :2014/04/07(月) 14:05:00.51 ID:nfj7Xkns
github.com/katahiromz/CodeReverse 更新しました。パースルーチンを追加。コードの近代化。 ライセンスをThe BSD 2-Clause Licenseに変更。 さあ、どんどん作るぞ!!!
技術レベルの高いことやってるね。
x86アセンブリから関数の引数のサイズを求める方法がわからない。知ってる人、教えてよ
calling convension調べろよ
そういうのはプロジェクト立ち上げる前に解決しとくと子だろ
catcher
途中何も読んでないから的外れ言ってたらすまんこまんこ 引数はPUSH最後からPUSHで行って、最後にリターンアドレスをPUSHして関数をcallする arg3 arg2 arg1 retaddr 引数が4バイトで3つの場合、呼び出し直後のスタックはこうなる
関数呼び出し規約の違いは引数の分のスタック処理を誰が責任持つかの違い __stdcallは呼び出された関数が最後にスタックを整理して返る __cdeclは呼び出し側がpushした分だけスタックを整理する __fastcallはcallする前にpushじゃなくて最大2つまでレジスタに値をぶっ込んでからcallする __thiscallはcallの直前にecxにthisポインタを入れてから呼び出すが、スタック処理は_規定では_stdcallと同じ 関数内でecxにあれこれしてローカル変数っぽいのを弄ってたらなんかしらのクラス決定 __cdeclを指定されたり可変個引数だったりするメンバ関数は、thisポインタを最後にスタックに積んだ気がする
__fastcall調べたなら「スタック処理を誰が責任持つかの違い」じゃ無いことは自明だろがアホ あとx64だとかなり様変わりする
169 :
デフォルトの名無しさん :2014/05/01(木) 02:11:28.08 ID:PhcFzFlz
ごめんニワカなんだすまんこまんこ __fastcallは3つ以上引数取るときには3つめ以降の責任は__stdcallと同じだったはず x64はほとんどレジスタで引数やりとりするんだっけ?全く詳しくないが
「引数の渡し方からしてそもそも違う」のに「誰が責任持つかの違い」に限定しなきゃいかん理由は何なんだ。
171 :
片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/01(木) 12:27:44.81 ID:WY/8p/R+
172 :
片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/01(木) 14:24:04.77 ID:O61PxCRM
型システムは70%くらいできた。 アセンブリから呼び出し規約と引数のサイズを推定するオートマトンを作らないといけない。 頑張るぜ。
Amazonでドラゴンブック二冊目買おうかな データフローを勉強したいんで
174 :
デフォルトの名無しさん :2014/05/01(木) 18:37:14.14 ID:O61PxCRM
買う買う光線ビーム!!!
こわい
買ったぞーーーー
178 :
片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/04(日) 13:00:24.41 ID:MUZRXExp
ビットフィールド、サポート出来そう。 次はオートマトンに取り組むぞ!!!
180 :
片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/05(月) 00:10:21.23 ID:vEoyNxMN
【関数呼び出しコード分析における注意点】 ☆呼び出しの際、スタックを解放せずに再利用されることがある。 ☆呼び出し先のアドレスがレジスタに格納されて呼び出しに使われることがある。 ☆また、条件によって場合分けされて呼び出し先の異なるアドレスがレジスタに格納されて呼び出しに使われることがある。
レベル0.機械語コード。 レベル1.アセンブリのみのコード。 レベル2.関数に切り分けられたアセンブリコード。 レベル3.レジスタとスタックの直接的操作を含む中間表現コード。 レベル4.レジスタとスタックの直接的操作を含まない中間表現コード。 レベル5.C言語のコード。 #こんな感じかな?
レベル3.レジスタとスタックの直接的操作を含む型なしの中間表現コード。 レベル4.レジスタとスタックの直接的操作を含まない型付きの中間表現コード。
命令セットの中間表現はテキストとして与えられる(insn*.dat)。 よって、中間表現の設計とパーサとASTが必要。 中間表現はC言語のサブセットの拡張とする。
gccは余分にスタックフレーム確保してる。。。何でだろ?
実現出来てもwatcom cの吐いたバイナリで面白いことになる予感
186 :
片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/07(水) 18:04:37.38 ID:ofrV91be
本が来た━━━━━━━━━!!!
コンパイラが関数だとすると、逆コンパイラは逆関数である。 逆なんだよ、逆。コンパイラのコード生成に対しては、逆コンパイラのコード分析が対応する。
__stdcallが一番簡単。__stdcallのときに限ってretの引数があって、それが関数の引数リストのサイズ。 __stdcallでないときはretに引数がなく、呼び出し側が引数スタックを解放する。 __cdeclか__fastcallか__thiscallの判断はレジスタの使用や関数呼び出しの状況を統計するしか方法はない。 スタックやレジスタやヒープの型情報とデータと式などを統合して扱う仕組みが必要。
統計しなくても理詰めで解けるケースを想定できんのか //どっちみち可変長引数は詰むけどな
ある関数内で呼び出すターゲット関数のスタック引数サイズは、スタックフレームマイナススタックポインタ以下の値を取りうる。 関数内でターゲット関数の呼び出しが1回のみで他にスタック操作をしていないなら、そのときのスタック引数サイズは確定する。 ターゲット関数内のレジスタとスタックの使用状況から、スタック引数サイズの下限がわかる。 可変長引数の場合は、スタック引数サイズは下限以上の値になる。
ということは、スタックフレームイコールスタックポインタの場合はターゲット関数の スタック引数サイズはゼロで確定で、ターゲット関数に対する統計は不要という訳か?
1.関数のスタック引数サイズとローカル領域を確定し、スタック操作を仮想化する。 2.コードを基本ブロックに分け、分岐を仮想化する。 3.オペランドに型を付けて型推論を行う。 4.データフロー解析を行い、中間表現へ変換。オペランドを式に抽象化する。 5.読みやすいように最適化しながら、コード生成を行う。 6.AStyleを使ってコードを整形する。
193 :
片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/11(日) 18:12:03.14 ID:FqMZuwkf
194 :
片山博文MZバグロボ ◆T6xkBnTXz7B0 :2014/05/14(水) 13:48:10.03 ID:dMA9XG5e
x86のintrinsicのまとまった情報が欲しいけど見付からない
符号付きか符号なしか分からない型をxsignedで表す。 未知の型はunknown%d_tという型を付ける。未知の型について型の属性を解析していく。 例えば、即値xが非ゼロで上位ワードがゼロならポインタでなく整数である。 callの引数は間違いなく関数ポインタである。
ということは、intrinsicのアセンブリパターンをほとんど全部調べて、 パターンマッチングでパターンごとに中間表現に置き換えていく必要があるんやで。 パターンデータを用意するのが大変やで、しかし。
pattern { (アセンブリのテンプレート) } code { (中間表現) } こんな感じのテキストデータを事前に読み込んで、それ(置き換え規則)を使って パターンマッチを行い、中間表現への置き換えをする。 テンプレートには$1,$2,$3,...などの引数が書ける。
パターンが足りず変換し損なうか、パターンが意図しない場所にマッチして変換し損なうか、 マッチ候補の組み合わせ探索量が爆発して尋常じゃなく遅くなる、て未来が見えそうだね。
最適化されたバイナリとか全く考えて無さそうだな 変換できなかったらインラインアセンブリのソースに変換します! ならかっこいいw
>>199 それ言い出すとインラインアセンブリだらけになっちゃうだろ!
ループ展開とか、再起がgoto文になってたりすると見にくそう
forもwhileもgotoになるだろう
>>197 コンパイラの癖が変わったら破たんするな。
>>203 コンパイラのバージョンとコンパイルオプションの組み合わせごとにパターンセット作るんじゃね?
手作業だと余裕で死ねる。
頻出形だけカバーできればいいだろ どうせ大事なのはその先なんだし
最初から最後までインラインアセンブリ
はーひふーへほー!!! 片山被告のせいで俺まで職場で悪役扱いだずぇ! まゆげが無くても父親が殺人者でも関係ねぇ! 俺はコンピュータテクノロジーの心臓部に弾丸を撃ち込んで歴史を塗り替えてみせる! 俺様は諦めない!がはははっひゃっ! ばいばいきーん!
最終チェックが終わったら次は64bitのパターンだな。 7月15日までに結果を出さねば。
jmp を for にできるようになったら呼んでくれ
211 :
片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 :2014/05/24(土) 15:37:43.79 ID:rwv5YdXW
たいした成果がないとスポンサーからの今年の研究費がお預けになる予感。。。開発を急がないと。。。 GitHubにてPull Repuest歓迎。アドバイス・批評歓迎。功績・貢献にはアマゾンギフト券かWebMoneyでお応えします。
もう少し納得がいくまでひらがな電卓がんばります。
うひょー、ひらがな電卓のお陰で研究費ゲットだぜぇ! もう少しひらがな電卓を頑張るずぇっ!
catcher
>>214 ニートですが研究費とかいうものはどうやったら貰えるのですか?
catcher
catcher
catcher
お花畑
catcher
catcher
バイナリをLLVMにするって可能なのか? うーん
しばらくCalc-Hの営業 時間ないな
catcher
GitHubで星が1つ付いた。頑張らないといけないのだが、時間がない。
catcher
時間ねーから
catcher
こんな嘘ばかりのスレ取り消せ。 クソボケが 、アホクソボケカスが。 根性無しのカスの集まりが。 どうせ何もできんのやろが? カスはカスらしく黙っとらんかい!クソボケ! 何なんじゃアホが。この根性無しのクズが。 クソボケクズ。クズの集まりじゃねえか。 ポンコツのクソドアホが。ボンクラだろがてめえら。 はっきり言っといてやるよ。 てめえらなんか、何一つ怖くないわ、 このクズ以下のポンコツボンクラが。
catcher
catcher
catcher
データフローの表現の問題が未解決。アイデアが見つかるまで時間が掛かりそうです。
dag (directed acyclic graph): 閉路のない有向グラフ。「グラフ理論」を参照。 基本ブロック (basic block): 途中で停止したり、分岐したりしない、連続した文の並び。 流れグラフ: 基本ブロックを制御の流れに従って矢印で結んだもの。 「基本ブロックのdag表現」とは、次のようなdag: 1.葉のラベルは一意な識別子。 2.内部節点のラベルは演算子。 3.さらに節点に識別子の並びのラベルを付けることができる。
この「内部節点」は、「節点内部」の誤訳だろうな
241 :
デフォルトの名無しさん :2014/12/31(水) 12:23:17.69 ID:UInHV6yl
『節点』に『内部』があると思っているのか?日本語からやり直せよチョソ
>>241 残念。節点なんだけど丸で描かれてその中にラベルがあるんだな、これが。
現在、インシデント解決待ち。
さあ、やるんだ
おう、がむばってくれ
DLLのリンク情報はどうやって抽出すればいい?
早くバグ取らないと怒鳴られるぞ。。。
250 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/02/15(日) 13:18:57.14 ID:YOxjOULg
おうがんばれや
へえ。結構やるじゃん。
今、リファクタリングとDBのサニタイズしてるとこ。いくつかサイズの間違いを見つけた。 構造体のサイズを正確に得るには、アライメントを考慮せねば。
A「では、進捗報告を」 B「アライメントの扱いに案外手こずり、まだDBのサニタイズが終わっていません」 A「時間が掛かりすぎだ!いつになったらできるんだ!(机を叩く)」 B「申し訳ございません。」 A「アライメントの規則性を分析して早くサニタイズしなさい」 B「御意」
255 :
片山博文MZ ◆T6xkBnTXz7B0 :2015/03/04(水) 12:32:04.66 ID:wAAd8cV7
型情報のload/saveを可能にしなきゃ。 定数の"typed value"計算を可能にしなきゃ。
今、typed valueの実装をやってるけど、型によって場合分けが 必要だから、「場合分けの化け物」になっちゃうんだよな。 関数型ならもっとスマートに書けそうだが。。。