linuxのメモ

Linux kernelの実装を解説していきます (対象ver 4.5)

自己修正コード - OLDINSTR_2()

概要

命令に必要なサイズ分のアドレスを確保する

詳細

以下の引数を受け取る

  • 置換元となる命令を示す文字列 : oldinstr
  • 置換する命令1の番号を示す : num1
  • 置換する命令2の番号を示す : num2

alt_rlen()num1num2を引数として実行し、命令1と命令2の命令が配置されるアドレスのサイズをそれぞれ取得する

次に取得した値の最大値をalt_max_short()から算出し、この値が置換元の命令のサイズを示すalt_slenのサイズと比較する

比較した結果、置換する命令のサイズの最大値が元の命令のサイズよりも大きい場合2つのサイズの差のサイズ分、スペースをNOP命令*1で埋める

最後にalt_end_markerで命令終了のシンボルを付加する

*1:バイトコード0x90で示される命令はNOPとして認識される