エントリーの編集
エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
記事へのコメント0件
- 注目コメント
- 新着コメント
このエントリーにコメントしてみましょう。
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
- バナー広告なし
- ミュート機能あり
- ダークモード搭載
関連記事
ホットパッチの仕組み - ペンギンの備忘録
だいたいの関数は関数プロローグ、関数コード、関数エピローグの3つの部分に分けて考えることが出来ます... だいたいの関数は関数プロローグ、関数コード、関数エピローグの3つの部分に分けて考えることが出来ます。コンパイルされた関数のアセンブリコード(x86)を見ると、ほとんどは次のような形になっていると思います。 mov edi,edi push ebp mov ebp,esp これが関数プロローグにあたる部分で、要は関数コードを実行するための準備と呼び出し元へ戻るための情報の退避をしているわけですが、一番最初に出てくるmov edi,ediという命令は、実行しても何ら意味のない命令です。この意味のないmov命令は、プログラムを停止させることなく実行中のコードにパッチを当てる、ホットパッチと呼ばれる機能のためにあります。ホットパッチはmov命令をjmp命令に置き換えて必要な箇所に処理を飛ばすことで実現できます。ただしmov edi,ediは2バイト命令ですので、jmp命令が指せるアドレスは127バ