はかせのラボ

私の頭の中を書いていく雑記ブログです

IL DnSpyが神ツールだった件

あいさつ

どうも、はかせです。
昨日から黒魔術士を目指してILを学び始めました。

所感としてはなんか楽しいです。
つよつよプログラマになったと錯覚できるからですかね。
(実態はよわよわプログラマ オブ ザ イヤーを受賞できるくらいよわよわプログラマですが)

今回は私が勉強で使っているツールで
DnSpyというツールが神がかっていたので
その話です。

DnSpyとは

.NETデコンパイラです。
GitHubにコードは公開されており、
ReadMeから飛べるリンクから実行ファイルも入手できます。
github.com

元々.NETデコンパイラと言えばILSpyというツールが定番だったそうです。
実際私も落として使ってみましたが、
動作もサクサクで見やすく使いやすいツールでした。

ただこのDnSpyはILSpyと比べて
・単体でデバッグが可能
・既にあるDLLの中身とかも弄れる
・ILでもステップ実行ができる
・UIや操作がVisualStudioライクで馴染みがある

という風に非常にデバッグ機能が強いです。

なのであたかも
VSでC#コードのデバッグをしているような感覚でILのデバッグが行える
というVSユーザーである私からしたらひゃっほーいって感じの神ツールです。
f:id:hakase0274:20190911213047p:plain
(IL命令の説明が出てくるのも親切で良き)

吐き出したexeの編集もコード上で右クリックして
f:id:hakase0274:20190911215645p:plain
EditClassを選びます。
そうするとこんな編集画面が起き上がるので
f:id:hakase0274:20190911215654p:plain
ここをこんな感じで変更し
f:id:hakase0274:20190911220925p:plain
右下のCompileボタンをクリック。これで編集完了です。

実行結果を見てみましょう。
まずは編集前
f:id:hakase0274:20190911221045p:plain
次に編集後
f:id:hakase0274:20190911221123p:plain

exeを直で開いて編集できた!
すごい!神!

ほめてばっかりもあれなんで・・・

もちろん神ツールなんでめっちゃいいんですよ。
おそらく一日程度しか使ってない私じゃまだ気づかない
神機能もたくさん搭載されていると思います。

ただこのブログで何度も言っているように
この世に銀の弾丸は存在しません。

このDnSpyも欠点(といっても微々たるものな希ガス)があります。
・なんか編集画面がもっさりする
・開いているexeやdllはロックされている
・DynamicMethodのデバッグはできない

一個目はただの主観です。
普段つかってるVSやVSCodeと比べて入力や予測変換が
もっさりしてる感じがしました。(VSがサクサクすぎるだけなんですが)

二個目はおそらく単体でデバッグするためなんでしょう。
dllとか開いている間は編集しても結果が反映されてませんでした。
(実行結果変わらず)
なんで編集したらDnSpyから外してあげましょう。

三個目はneueccさんの記事に書いてました。
私はまだその領域まで勉強を進めれていないので
経験できておりません。

あとがき

今回はDnSpyが予想以上に神ってたので
その紹介でした。

DnSpyが神だと気づいた時の私


そしてこのツイートに対するリプでSharpLabというブラウザ上で動くツールを教えてもらいました。
なんとこれILだけじゃなくてJITコンパイルされた機械語まで見れちゃいます
また一つ神ツールを知ってしまったようだ・・・

それでは今回はこの辺でノシ