CodeReverseは、片山博文MZが開発している、Windows用の逆アセンブラ兼ダンプツールです。
最終的には「リバーシブルな」逆コンパイラを目指しています。
CodeReverse公式サイト
http://katahiromz.web.fc2.com/codereverse/
GitHubレポジトリはこちら
https://github.com/katahiromz/CodeReverse
探検
逆コンパイラCodeReverseを作る
■ このスレッドは過去ログ倉庫に格納されています
1片山博文MZコスモ ◆T6xkBnTXz7B0
2013/09/24(火) 14:58:48.342013/11/30(土) 01:37:10.38
>>50-51
Salamander
Salamander
98片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/03(火) 11:45:36.02 スクリーンセーバーの移植が終わったので、CodeReverseの開発を再開します。
99片山博文MZコスモ ◆T6xkBnTXz7B0
2013/12/05(木) 23:14:57.22 また仕事が入った
100デフォルトの名無しさん
2013/12/13(金) 23:20:47.44 catcher
101デフォルトの名無しさん
2013/12/19(木) 04:29:33.68 Windows 系の .exe .dll を逆コンパイルするので分りやすいコードを吐いてくれるのは
今って何が高性能?
C#ぐらいの言語っぽいのだと分りやすいんだけど
今って何が高性能?
C#ぐらいの言語っぽいのだと分りやすいんだけど
102デフォルトの名無しさん
2013/12/19(木) 18:50:48.68 機械語からの逆コンパイルは大抵ろくなコードが出てこない。
マトモなコードになるのは中間言語からの逆コンパイルくらいだな。
.NETやJavaやActionScriptやHSPの中間言語は結構普通の逆コンパイル結果が得られる。
マトモなコードになるのは中間言語からの逆コンパイルくらいだな。
.NETやJavaやActionScriptやHSPの中間言語は結構普通の逆コンパイル結果が得られる。
103101
2013/12/21(土) 05:43:16.03 逆コンパイルで出てきたコードを書き換えてコンパイルしようという訳じゃないんだ。
機器のログを表示するソフトのデータ読み込みにバグがあるみたいで
自分で表示用データを出せるプログラム作ろうとしたら一部計算式が分らない
三角関数だろうけど
機器のログを表示するソフトのデータ読み込みにバグがあるみたいで
自分で表示用データを出せるプログラム作ろうとしたら一部計算式が分らない
三角関数だろうけど
104デフォルトの名無しさん
2013/12/21(土) 06:25:42.35 >>103
だから中間言語使った実行ファイルなら逆コンパイルも実用になるけど、
機械語使った実行ファイルの逆コンパイラはなかなか実用にならんよ。
たぶん逆アセンブラがなんだかんだ一番実用的だと思うぞ。
その.exeや.dllが中間言語使ってる実行ファイルかどうかは知らん。
.NETあたりだと逆コンパイルも楽だから.NETだといいね。
だから中間言語使った実行ファイルなら逆コンパイルも実用になるけど、
機械語使った実行ファイルの逆コンパイラはなかなか実用にならんよ。
たぶん逆アセンブラがなんだかんだ一番実用的だと思うぞ。
その.exeや.dllが中間言語使ってる実行ファイルかどうかは知らん。
.NETあたりだと逆コンパイルも楽だから.NETだといいね。
105デフォルトの名無しさん
2013/12/21(土) 09:06:13.91 >>103
その機器のメーカーに直してもらえよ
その機器のメーカーに直してもらえよ
106デフォルトの名無しさん
2013/12/21(土) 10:17:26.47 アセンブラは機械語と一対一に対応しているとよく言われるけど、
実際は対応していない。
同じアセンブリでも配置によって複数の機械語から特定のコードを選択
しなければならないプロセッサはよくありがち。
いろいろ面倒だよ。
実際は対応していない。
同じアセンブリでも配置によって複数の機械語から特定のコードを選択
しなければならないプロセッサはよくありがち。
いろいろ面倒だよ。
107デフォルトの名無しさん
2013/12/21(土) 13:06:51.16 >>103
ログ読み取りに不透明要素を持ちこむな 本末転倒にもほどがある
ログ読み取りに不透明要素を持ちこむな 本末転倒にもほどがある
108デフォルトの名無しさん
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に移植。
>逆アセンブラを途中まで作成。
いつのまにか逆アセンブラにグレードダウン(笑)
なんというか、「〜をダウンロードした」とか「〜を勉強中」など
どうでもいいことは大声で宣伝するが、重要なことは何も言わないとか・・・
>2013年の実績:
>クロスワードギバーを完成。
>XScreenSaverの200個以上のスクリーンセーバーをWindowsに移植。
>逆アセンブラを途中まで作成。
いつのまにか逆アセンブラにグレードダウン(笑)
なんというか、「〜をダウンロードした」とか「〜を勉強中」など
どうでもいいことは大声で宣伝するが、重要なことは何も言わないとか・・・
110デフォルトの名無しさん
2014/01/02(木) 04:25:05.69 ネタギレです…しばらく保守になります。
この停滞状態が我慢できなければGitHubでPull requestしてね
この停滞状態が我慢できなければGitHubでPull requestしてね
111デフォルトの名無しさん
2014/01/02(木) 18:37:25.91 都合が悪くなると名無しで発言するんだな、発言の内容からして本人であることは明白なんだが
112デフォルトの名無しさん
2014/01/04(土) 23:27:07.00 ドラゴンプック買えばいいんですかね?
113デフォルトの名無しさん
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」
118片山博文MZコスモ ◆T6xkBnTXz7B0
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にインストールしちゃ駄目らしい。やり直し。
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にインストールしちゃ駄目らしい。やり直し。
119片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 16:44:20.33 これも必要
set BISON_PKGDATADIR=C:\GnuWin32\share\bison
set BISON_PKGDATADIR=C:\GnuWin32\share\bison
120片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/17(金) 17:21:08.45 報告。ドラゴン本第三章まで読了。左再帰を右再帰に直す方法を学習した。
フロントエンド、フェーズなどの用語を習得した。
GNU Win32 Bison(Yacc)+Flex(Lex)のインストールに成功した。
引き続きBison+Flexの使い方を勉強する。
フロントエンド、フェーズなどの用語を習得した。
GNU Win32 Bison(Yacc)+Flex(Lex)のインストールに成功した。
引き続きBison+Flexの使い方を勉強する。
121片山博文MZコスモ ◆T6xkBnTXz7B0
2014/01/20(月) 12:27:07.18122デフォルトの名無しさん
2014/01/20(月) 12:34:03.66 あれ、逆コンパイラじゃなかったの?
フロントエンドよりバックエンドの方が重要だろう
俺が知らないうちに方針が変わったのかな
フロントエンドよりバックエンドの方が重要だろう
俺が知らないうちに方針が変わったのかな
123デフォルトの名無しさん
2014/01/20(月) 13:35:44.73 ロバ「方針が変わったのかな」
124デフォルトの名無しさん
2014/01/20(月) 14:32:20.01 どうでもいい。アホは自由だけが取り柄、好きにすればいいじゃない。
125片山博文MZ無能 ◆T6xkBnTXz7B0
2014/01/25(土) 13:20:17.50126片山博文MZ無能 ◆T6xkBnTXz7B0
2014/01/25(土) 17:51:54.00 Cで書くべきかC++で書くべきか?
127片山博文MZ無能 ◆T6xkBnTXz7B0
2014/01/25(土) 18:01:36.51 bison+flexで作ったパーサーを2つ以上取り込むことができないから、Cはダメだな、C++にしよう
128片山博文MZ無能 ◆T6xkBnTXz7B0
2014/01/27(月) 17:02:56.74 ftp://sunsite.unc.edu/pub/Linux/devel/lang/c/cdecl-2.5.tar.gz
ここにcdeclというプログラムのソースがある。これを分析する。
ここにcdeclというプログラムのソースがある。これを分析する。
129片山博文MZ無能 ◆T6xkBnTXz7B0
2014/01/30(木) 22:11:39.12 最近はPEGを使うのが流行りなのか? ちょっくら調べてみるか
130片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/10(月) 23:06:04.01 パーサジェネレータの勉強を兼ねて電卓を作ってます。
131デフォルトの名無しさん
2014/02/11(火) 19:47:51.54 bison/flexのパーサーが複数使えないって
片山はマニュアルが理解できないのか
片山はマニュアルが理解できないのか
132片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/11(火) 23:26:24.57 Windowsではまだmodern Bison++(3+)は入手できない。
それにC++に関してはまだ実験的らしい。
すぐに使えなくなりそうなコードは書きたくない。
だからANTLR3を使うことにした。
それにC++に関してはまだ実験的らしい。
すぐに使えなくなりそうなコードは書きたくない。
だからANTLR3を使うことにした。
133デフォルトの名無しさん
2014/02/12(水) 22:39:20.23 ドラゴンブックに挫折したか
134片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/16(日) 10:43:23.84135デフォルトの名無しさん
2014/02/16(日) 12:48:36.08 SS貼れよ
136デフォルトの名無しさん
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
>
> 871263948761872364871623946182973164+8761928734912634183412379461874234
Result is: 880025877496784999055036325644847398
> s=92183019827349179203471
s := 92183019827349179203471
Result is: 92183019827349179203471
> sin(s)%100.3
Result is: 0.7484296692622107891527456053804399259219719456829430374497200718368
9079690554390091960884209113407122218168687650754654152155867
>
137片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/18(火) 20:15:08.01 C11を勉強しなければ‥‥
138デフォルトの名無しさん
2014/02/20(木) 00:45:01.32 電卓で終わる予感
139片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/20(木) 12:37:10.33 Grammar Zoo
http://slps.github.io/zoo/
http://slps.github.io/zoo/
140片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/20(木) 13:23:01.18 __extension__とか__builtin*とか処理が多いなあ。
141片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/21(金) 16:51:09.37 ANTLRでFOLLOW_set_in_問題が発生した。これも使えないのか。。。
142片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/22(土) 13:41:25.80 bison-3.0.2をビルドしようとしたが失敗。
CaperとPEGを試してみる。。。
CaperとPEGを試してみる。。。
143片山博文MZ無能 ◆T6xkBnTXz7B0
2014/02/22(土) 19:42:42.68 スマポ? なにそれおいしいの?
144片山博文MZ無能 ◆T6xkBnTXz7B0
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が最強かなと思い始める。。。
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.65147片山博文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
まずは、計測。
$ 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
148デフォルトの名無しさん
2014/03/02(日) 14:19:11.94 騙されてる
149片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/07(金) 17:53:42.51150片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/10(月) 22:07:35.64 型のデータ構造とASTを構築中。。。
151片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/11(火) 11:51:20.24 @jonigataさんのCaperが劇的に高速化されたらしいぞ!!!
github.com/jonigata/caper
github.com/jonigata/caper
152片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/13(木) 20:23:31.76ID:AgM9wxep 汗から関数を切り出すのはできた。汗コードから関数の引数の個数を判定する方法がわからない。
最近汗やってないな。。。
最近汗やってないな。。。
153片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/14(金) 22:06:20.31ID:j99O0IvR 雑用とか色々有って忙しいんだよな。
C2EXEの作者でも降臨して手伝ってくれないかなあ〜。多分連絡取れないんだろうな。
C2EXEの作者でも降臨して手伝ってくれないかなあ〜。多分連絡取れないんだろうな。
154片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/14(金) 22:07:44.17ID:j99O0IvR exe2cの間違いだった。。。
155片山博文MZジェバンニ ◆T6xkBnTXz7B0
2014/03/21(金) 16:00:15.28ID:15wzZBuZ AST構築中。。。
156片山博文MZジェバンニ ◆T6xkBnTXz7B0
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
http://katahiromz.web.fc2.com/mathai/cparser8.txz
158デフォルトの名無しさん
2014/04/02(水) 01:48:11.12ID:DfhRYDJb まだやってたのか
159片山博文MZジェバンニ ◆T6xkBnTXz7B0
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に変更。
さあ、どんどん作るぞ!!!
更新しました。パースルーチンを追加。コードの近代化。
ライセンスをThe BSD 2-Clause Licenseに変更。
さあ、どんどん作るぞ!!!
161マイク ◆gZ6OoOjBU6
2014/04/20(日) 10:23:49.34ID:3IIwiFaC 技術レベルの高いことやってるね。
162片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/04/20(日) 17:23:11.71ID:Z/njjQP5 x86アセンブリから関数の引数のサイズを求める方法がわからない。知ってる人、教えてよ
163デフォルトの名無しさん
2014/04/20(日) 20:30:04.45ID:mILxVbg/ calling convension調べろよ
164デフォルトの名無しさん
2014/04/21(月) 00:20:07.86ID:fKV6ATCG そういうのはプロジェクト立ち上げる前に解決しとくと子だろ
165デフォルトの名無しさん
2014/04/30(水) 18:48:27.62ID:4dW9hwGr catcher
166デフォルトの名無しさん
2014/04/30(水) 23:08:35.10ID:yRPuq9ZX 途中何も読んでないから的外れ言ってたらすまんこまんこ
引数はPUSH最後からPUSHで行って、最後にリターンアドレスをPUSHして関数をcallする
arg3
arg2
arg1
retaddr
引数が4バイトで3つの場合、呼び出し直後のスタックはこうなる
引数はPUSH最後からPUSHで行って、最後にリターンアドレスをPUSHして関数をcallする
arg3
arg2
arg1
retaddr
引数が4バイトで3つの場合、呼び出し直後のスタックはこうなる
167デフォルトの名無しさん
2014/04/30(水) 23:20:48.12ID:yRPuq9ZX 関数呼び出し規約の違いは引数の分のスタック処理を誰が責任持つかの違い
__stdcallは呼び出された関数が最後にスタックを整理して返る
__cdeclは呼び出し側がpushした分だけスタックを整理する
__fastcallはcallする前にpushじゃなくて最大2つまでレジスタに値をぶっ込んでからcallする
__thiscallはcallの直前にecxにthisポインタを入れてから呼び出すが、スタック処理は_規定では_stdcallと同じ
関数内でecxにあれこれしてローカル変数っぽいのを弄ってたらなんかしらのクラス決定
__cdeclを指定されたり可変個引数だったりするメンバ関数は、thisポインタを最後にスタックに積んだ気がする
__stdcallは呼び出された関数が最後にスタックを整理して返る
__cdeclは呼び出し側がpushした分だけスタックを整理する
__fastcallはcallする前にpushじゃなくて最大2つまでレジスタに値をぶっ込んでからcallする
__thiscallはcallの直前にecxにthisポインタを入れてから呼び出すが、スタック処理は_規定では_stdcallと同じ
関数内でecxにあれこれしてローカル変数っぽいのを弄ってたらなんかしらのクラス決定
__cdeclを指定されたり可変個引数だったりするメンバ関数は、thisポインタを最後にスタックに積んだ気がする
168デフォルトの名無しさん
2014/05/01(木) 00:42:00.30ID:VSccnwjx __fastcall調べたなら「スタック処理を誰が責任持つかの違い」じゃ無いことは自明だろがアホ
あとx64だとかなり様変わりする
あとx64だとかなり様変わりする
169デフォルトの名無しさん
2014/05/01(木) 02:11:28.08ID:PhcFzFlz ごめんニワカなんだすまんこまんこ
__fastcallは3つ以上引数取るときには3つめ以降の責任は__stdcallと同じだったはず
x64はほとんどレジスタで引数やりとりするんだっけ?全く詳しくないが
__fastcallは3つ以上引数取るときには3つめ以降の責任は__stdcallと同じだったはず
x64はほとんどレジスタで引数やりとりするんだっけ?全く詳しくないが
170デフォルトの名無しさん
2014/05/01(木) 02:48:55.05ID:VSccnwjx 「引数の渡し方からしてそもそも違う」のに「誰が責任持つかの違い」に限定しなきゃいかん理由は何なんだ。
171片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/01(木) 12:27:44.81ID:WY/8p/R+172片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/01(木) 14:24:04.77ID:O61PxCRM 型システムは70%くらいできた。
アセンブリから呼び出し規約と引数のサイズを推定するオートマトンを作らないといけない。
頑張るぜ。
アセンブリから呼び出し規約と引数のサイズを推定するオートマトンを作らないといけない。
頑張るぜ。
173片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/01(木) 18:16:21.29ID:O61PxCRM Amazonでドラゴンブック二冊目買おうかな
データフローを勉強したいんで
データフローを勉強したいんで
174デフォルトの名無しさん
2014/05/01(木) 18:37:14.14ID:O61PxCRM 買う買う光線ビーム!!!
175デフォルトの名無しさん
2014/05/01(木) 19:17:47.73ID:ZMd3mcxT こわい
176片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/02(金) 12:19:45.40ID:fCG9D4SE 買ったぞーーーー
177デフォルトの名無しさん
2014/05/02(金) 22:33:36.49ID:uljkUnkD178片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/04(日) 13:00:24.41ID:MUZRXExp179片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/04(日) 18:25:07.84ID:6pFdiYZZ ビットフィールド、サポート出来そう。
次はオートマトンに取り組むぞ!!!
次はオートマトンに取り組むぞ!!!
180片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/05(月) 00:10:21.23ID:vEoyNxMN 【関数呼び出しコード分析における注意点】
☆呼び出しの際、スタックを解放せずに再利用されることがある。
☆呼び出し先のアドレスがレジスタに格納されて呼び出しに使われることがある。
☆また、条件によって場合分けされて呼び出し先の異なるアドレスがレジスタに格納されて呼び出しに使われることがある。
☆呼び出しの際、スタックを解放せずに再利用されることがある。
☆呼び出し先のアドレスがレジスタに格納されて呼び出しに使われることがある。
☆また、条件によって場合分けされて呼び出し先の異なるアドレスがレジスタに格納されて呼び出しに使われることがある。
181片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/05(月) 00:44:45.91ID:vEoyNxMN レベル0.機械語コード。
レベル1.アセンブリのみのコード。
レベル2.関数に切り分けられたアセンブリコード。
レベル3.レジスタとスタックの直接的操作を含む中間表現コード。
レベル4.レジスタとスタックの直接的操作を含まない中間表現コード。
レベル5.C言語のコード。
#こんな感じかな?
レベル1.アセンブリのみのコード。
レベル2.関数に切り分けられたアセンブリコード。
レベル3.レジスタとスタックの直接的操作を含む中間表現コード。
レベル4.レジスタとスタックの直接的操作を含まない中間表現コード。
レベル5.C言語のコード。
#こんな感じかな?
182デフォルトの名無しさん
2014/05/05(月) 00:47:27.64ID:vEoyNxMN レベル3.レジスタとスタックの直接的操作を含む型なしの中間表現コード。
レベル4.レジスタとスタックの直接的操作を含まない型付きの中間表現コード。
レベル4.レジスタとスタックの直接的操作を含まない型付きの中間表現コード。
183片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/05(月) 01:30:48.74ID:vEoyNxMN 命令セットの中間表現はテキストとして与えられる(insn*.dat)。
よって、中間表現の設計とパーサとASTが必要。
中間表現はC言語のサブセットの拡張とする。
よって、中間表現の設計とパーサとASTが必要。
中間表現はC言語のサブセットの拡張とする。
184片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/05(月) 15:16:53.17ID:vEoyNxMN gccは余分にスタックフレーム確保してる。。。何でだろ?
185デフォルトの名無しさん
2014/05/06(火) 13:59:33.71ID:e6OeMlN3 実現出来てもwatcom cの吐いたバイナリで面白いことになる予感
186片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/07(水) 18:04:37.38ID:ofrV91be 本が来た━━━━━━━━━!!!
187片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/08(木) 15:32:25.08ID:o5H0kOM9 コンパイラが関数だとすると、逆コンパイラは逆関数である。
逆なんだよ、逆。コンパイラのコード生成に対しては、逆コンパイラのコード分析が対応する。
逆なんだよ、逆。コンパイラのコード生成に対しては、逆コンパイラのコード分析が対応する。
188片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/08(木) 17:50:21.71ID:o5H0kOM9 __stdcallが一番簡単。__stdcallのときに限ってretの引数があって、それが関数の引数リストのサイズ。
__stdcallでないときはretに引数がなく、呼び出し側が引数スタックを解放する。
__cdeclか__fastcallか__thiscallの判断はレジスタの使用や関数呼び出しの状況を統計するしか方法はない。
スタックやレジスタやヒープの型情報とデータと式などを統合して扱う仕組みが必要。
__stdcallでないときはretに引数がなく、呼び出し側が引数スタックを解放する。
__cdeclか__fastcallか__thiscallの判断はレジスタの使用や関数呼び出しの状況を統計するしか方法はない。
スタックやレジスタやヒープの型情報とデータと式などを統合して扱う仕組みが必要。
189デフォルトの名無しさん
2014/05/09(金) 09:45:23.59ID:b6QXm0aH 統計しなくても理詰めで解けるケースを想定できんのか
//どっちみち可変長引数は詰むけどな
//どっちみち可変長引数は詰むけどな
190片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/10(土) 00:46:59.62ID:4sLYkLKE ある関数内で呼び出すターゲット関数のスタック引数サイズは、スタックフレームマイナススタックポインタ以下の値を取りうる。
関数内でターゲット関数の呼び出しが1回のみで他にスタック操作をしていないなら、そのときのスタック引数サイズは確定する。
ターゲット関数内のレジスタとスタックの使用状況から、スタック引数サイズの下限がわかる。
可変長引数の場合は、スタック引数サイズは下限以上の値になる。
関数内でターゲット関数の呼び出しが1回のみで他にスタック操作をしていないなら、そのときのスタック引数サイズは確定する。
ターゲット関数内のレジスタとスタックの使用状況から、スタック引数サイズの下限がわかる。
可変長引数の場合は、スタック引数サイズは下限以上の値になる。
191片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/10(土) 00:54:06.86ID:4sLYkLKE ということは、スタックフレームイコールスタックポインタの場合はターゲット関数の
スタック引数サイズはゼロで確定で、ターゲット関数に対する統計は不要という訳か?
スタック引数サイズはゼロで確定で、ターゲット関数に対する統計は不要という訳か?
192片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/10(土) 01:26:55.17ID:4sLYkLKE 1.関数のスタック引数サイズとローカル領域を確定し、スタック操作を仮想化する。
2.コードを基本ブロックに分け、分岐を仮想化する。
3.オペランドに型を付けて型推論を行う。
4.データフロー解析を行い、中間表現へ変換。オペランドを式に抽象化する。
5.読みやすいように最適化しながら、コード生成を行う。
6.AStyleを使ってコードを整形する。
2.コードを基本ブロックに分け、分岐を仮想化する。
3.オペランドに型を付けて型推論を行う。
4.データフロー解析を行い、中間表現へ変換。オペランドを式に抽象化する。
5.読みやすいように最適化しながら、コード生成を行う。
6.AStyleを使ってコードを整形する。
193片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/11(日) 18:12:03.14ID:FqMZuwkf 0.1.4! コードを整理。
https://github.com/katahiromz/CodeReverse
https://github.com/katahiromz/CodeReverse
194片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/14(水) 13:48:10.03ID:dMA9XG5e x86のintrinsicのまとまった情報が欲しいけど見付からない
195片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/15(木) 19:14:50.89ID:KjqXcag5 符号付きか符号なしか分からない型をxsignedで表す。
未知の型はunknown%d_tという型を付ける。未知の型について型の属性を解析していく。
例えば、即値xが非ゼロで上位ワードがゼロならポインタでなく整数である。
callの引数は間違いなく関数ポインタである。
未知の型はunknown%d_tという型を付ける。未知の型について型の属性を解析していく。
例えば、即値xが非ゼロで上位ワードがゼロならポインタでなく整数である。
callの引数は間違いなく関数ポインタである。
196片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/16(金) 00:32:42.44ID:YZ6eU1pI ということは、intrinsicのアセンブリパターンをほとんど全部調べて、
パターンマッチングでパターンごとに中間表現に置き換えていく必要があるんやで。
パターンデータを用意するのが大変やで、しかし。
パターンマッチングでパターンごとに中間表現に置き換えていく必要があるんやで。
パターンデータを用意するのが大変やで、しかし。
197片山博文MZバグロボ ◆T6xkBnTXz7B0
2014/05/17(土) 23:48:39.82ID:MhKuGNEw pattern {
(アセンブリのテンプレート)
} code {
(中間表現)
}
こんな感じのテキストデータを事前に読み込んで、それ(置き換え規則)を使って
パターンマッチを行い、中間表現への置き換えをする。
テンプレートには$1,$2,$3,...などの引数が書ける。
(アセンブリのテンプレート)
} code {
(中間表現)
}
こんな感じのテキストデータを事前に読み込んで、それ(置き換え規則)を使って
パターンマッチを行い、中間表現への置き換えをする。
テンプレートには$1,$2,$3,...などの引数が書ける。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 鈴木農相「おこめ券はお米しか買えないわけではない。例えば卵、味噌、しょうゆ、こうした購入に利用可能」 [Hitzeschleier★]
- なぜリベラルは人気がないのか 斎藤幸平さんが指し示す未来への道筋:朝日新聞 [少考さん★]
- なぜリベラルは人気がないのか 斎藤幸平さんが指し示す未来への道筋:朝日新聞 ★2 [少考さん★]
- 【日本人の旅行離れ】国内旅行すら行けなくなった……オーバーツーリズムだけじゃない 旅行者減少の異常事態 ★2 [ぐれ★]
- ベトナムのバイク「脱ガソリン」、シェア8割のホンダに打撃…政府が電動二輪普及を主導 [煮卵★]
- “ひとり焼肉”でおなじみ「焼肉ライク」が閉店ラッシュ。なぜ「コスパが悪い」と言われてしまうのか [Gecko★]
- トランプ「高市ちょっと飛んでみて」高市「?ぴょんぴょん(チャリンチャリン)」トランプ「よし、まだ金あるから防衛費増額な」 [931948549]
- 「台湾の女子アナ」ってよくね?※参考イメージあり
- 小泉防衛大臣「レーダー照射がサァ!中国がサァ!」米国「そう・・・(無関心)」 [834922174]
- ニート、無職、精神障害集まれ
- 【実況】博衣こよりのえちえちドラクエ1&2リメイク🧪
- ちびまる子ちゃんで一番可愛い子wwwww
