総当たりARM64

第2回カーネル/VM探検隊@つくばでの発表「総当たりARM64」について経緯をまとめました。2年前の着手時点では資料がありませんでした。
2
前へ 1 2 ・・ 5 次へ
七誌 @7shi

@syuu1228 AArch64は命令フォーマットが別物になっていて、かなり整理されたという印象です。オペコード一覧表が見付からなかったので、総当たりで逆アセンブルした結果を眺めた印象に過ぎませんが。

2013-04-18 10:11:31
七誌 @7shi

AArch64は4KBページと64KBページの2種類がある。32bit互換モードが動かせるのは4KBモードのみ。 lkml.org/lkml/2012/7/6/… 仮想アドレスとインデックス git.kernel.org/cgit/linux/ker… (前回のBSD本読書会で板書したような図)

2013-05-04 15:51:04
七誌 @7shi

dynamic linkの実験をどうするか考えて、MIPSとAlphaとAArch64を並べて眺めていた。 MIPSは命令がシンプルだけど遅延スロットが微妙。 Alphaも命令がシンプルだけどGP周りがくどい。 AArch64は命令がやや複雑だけど、コード構成はすっきり。

2013-05-04 16:03:35
七誌 @7shi

dynamic linkの実験をしようと並べたMIPS/Alpha/ARM32/ARM64のテストコード。 gist.github.com/7shi/5516613 AArch64の ldrb w0, [x19,#1]! の ! はx19の値を操作する印で、32bitにもある。

2013-05-04 16:49:57
七誌 @7shi

MSYS用のaarch64-elf-gccのビルド済みバイナリ sdrv.ms/13UBGQR

2013-05-05 03:18:33
七誌 @7shi

aarch64を見ている。レジスタに即値を入れる時、レジスタが即値よりも下位に配置されているから、即値がそのまま見えない。バイナリ入門でいきなり見せて推測を促すにはちょっと敷居が高いかも。それでもARMでシフトを駆使したりするよりは分かりやすいけど。

2013-07-30 00:40:47
七誌 @7shi

ARM64はAlphaより美しいという下馬評で興味を持ったものの、結局まともに取り組めていない。しかし現時点ではMIPSの理解不足を痛感しているので、後回しになるかも。。。

2014-01-30 22:29:11

再開

七誌 @7shi

逆アセンブル結果は1ファイル約3MB。3*65536/1024=192 により、結果を格納するには約200GB必要。今の基準だと大したことないけど、私のマシンはそんなに余裕がない。中止して冗長部分を省略するようなフィルタを書くか。。。

2014-08-06 23:55:16
七誌 @7shi

フィルタを書いて、2並列で昨日から放置しているけどまだ半分程度。5年前のマシンでやっているからこんなものかな。こういうCPU速度が影響するような使い方はたまにしかやらないから、普段は特に不便を感じない。

2014-08-07 19:46:33
七誌 @7shi

2並列で33時間掛かって4バイト範囲の全逆アセンブルが完了した。あまりにも容量を食うから、出力はアセンブリ部分だけ残してアドレスや機械語は消した。それでも80GBもある。こんな巨大なデータを相手にしたことがないけど、さてどうするか。。。

2014-08-08 14:26:38
七誌 @7shi

ログに欠損がないか調べている。大したことをやっていないのだけど、80GBをずっと読み込み続けているためとても重い。 find . -name "*.txt" | xargs wc -l | tee ../wcl

2014-08-09 07:16:44
七誌 @7shi

2時間半掛けて終了。特に欠損はなかった。単に行を数えるだけでもこれだけ時間が掛かるということは、全体に対して処理をしたときに最低でも掛かる時間を意味していると思われる。

2014-08-09 10:37:38
七誌 @7shi

連続するニーモニックの抽出とニーモニックの割合を調査したら5時間以上掛かった。しかも途中にフラグがあるらしくニーモニックの分布がモザイクになっていて、ニーモニックの切替回数が43億中1537万と、とんでもないことになっていた。途中のフラグの同定を考えないといけない。

2014-08-10 00:14:49
七誌 @7shi

ニーモニックの出現率を調べたら約70%が.inst(未定義)だった。これを省けは全数調査がかなり楽になる。こんなに多いとは思わなかった。

2014-08-10 12:01:30
七誌 @7shi

ニーモニックごとに論理積を取れば共通パターンが抽出できることに気付いた。

2014-08-10 22:47:19
七誌 @7shi

ニーモニックの出現比率と共通パターンを調査した。全体の約70%を占める未定義命令を排除したので処理時間は30分程度に短縮した。 onedrive.live.com/redir?resid=FB…

2014-08-11 00:03:50
七誌 @7shi

異常に出現比率が高い命令があるのは取り得る即値やディスプレースメントをすべてカウントしているため。それらを正規化してパターンを抽出しないと正確なことは分からない。

2014-08-11 00:10:42
七誌 @7shi

2つの数値を比較して変化したビットを検出するのはXORでできることに気付いた。わざわざ1bitずつ比較する関数を作ってしかもバグっていたので、時間を無駄にしてしまった。

2014-08-11 08:25:34
七誌 @7shi

数値を代数化してパターンの分析を試みている。遅いマシンで集計しているため一晩経ってもまだ集計が終わっていないけど、命令ごとのzrとspの使い分けを先に調べて31として扱えば良かったかも。

2014-08-12 13:31:49
七誌 @7shi

32bitも同じ手法で分析しようかと思い始めた。登録しないと入手できない資料を元にすると引用もできないので、自由に使い回せる資料があると都合が良い。32bitの場合は条件ビットを抜けば総当りでも2億7千万程度。練習として先にやれば良かったかも。

2014-08-12 13:45:30
七誌 @7shi

20時間掛かって分析が完了。ニーモニックとオペランドのパターンは8,957種類。r31をまとめなかったので無駄にパターンが増えている。眺めながら今後の方針を検討しよう。。。 onedrive.live.com/redir?resid=FB…

2014-08-12 19:54:22
七誌 @7shi

[x31]は一律に[sp]と解釈して良いようだ。仮に[xzr]があっても、ぬるぽで使い物にならないからだろう。

2014-08-12 21:50:22
七誌 @7shi

addではspは第1オペランドと第2オペランドにしか出て来ない。オペコードを見るとxzrはx31と解釈できるのに対し、spはオペコードが一部異なる。他の命令も見て、xzrが一律にx31と解釈できるかどうか調べよう。

2014-08-12 22:29:14
七誌 @7shi

そのためにはwspやspが出てくるパターンをwzrやxzrに置換して一致するパターンが存在するかどうかを確認すれば良さそう。方針が決まればそのように調査するスクリプトが書ける。機械学習で自動抽出できれば理想だけど、それは趣旨が異なるので、いずれ機会があれば。。。

2014-08-12 22:35:29
前へ 1 2 ・・ 5 次へ