アノテーションリファレンス
bytekinアノテーションの完全なリファレンスです。
@ModifyClass
目的
バイトコード変換のためのフックメソッドを含むクラスをマークします。
使用方法
@ModifyClass("com.example.TargetClass")
public class MyHooks {
// ここにフックメソッド
}
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| className | String | はい | ターゲットクラスの完全修飾名 |
スコープ
クラス型にのみ適用されます。
@Inject
目的
メソッドの特定の位置にコードをインジェクトします。
使用方法
@Inject(
methodName = "myMethod",
methodDesc = "(I)Ljava/lang/String;",
at = At.HEAD
)
public static CallbackInfo hook(int param) { }
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| methodName | String | はい | ターゲットメソッド名 |
| methodDesc | String | はい | メソッドディスクリプタ(JVM形式) |
| at | At | はい | コードをインジェクトする位置 |
スコープ
メソッドにのみ適用されます。
戻り値の型
CallbackInfoを返す必要があります。
@Invoke
目的
メソッド呼び出しをインターセプトします。
使用方法
@Invoke(
targetMethodName = "parentMethod",
targetMethodDesc = "()V",
invokeMethodName = "childMethod",
invokeMethodDesc = "(I)V",
shift = Shift.BEFORE
)
public static CallbackInfo hook() { }
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| targetMethodName | String | はい | 呼び出しを含むメソッド |
| targetMethodDesc | String | はい | ターゲットメソッドのディスクリプタ |
| invokeMethodName | String | はい | 呼び出されるメソッドの名前 |
| invokeMethodDesc | String | はい | 呼び出されるメソッドのディスクリプタ |
| shift | Shift | はい | 呼び出しの前か後か |
スコープ
メソッドにのみ適用されます。
@Redirect
目的
メソッド呼び出しを別のターゲットにリダイレクトします。
使用方法
@Redirect(
targetMethodName = "oldMethod",
targetMethodDesc = "()V",
redirectMethodName = "newMethod",
redirectMethodDesc = "()V"
)
public static void hook() { }
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| targetMethodName | String | はい | 呼び出しを含むメソッド |
| targetMethodDesc | String | はい | ターゲットメソッドのディスクリプタ |
| redirectMethodName | String | はい | リダイレクトメソッドの名前 |
| redirectMethodDesc | String | はい | リダイレクトメソッドのディスクリプタ |
@ModifyConstant
目的
バイトコード内の定数値を変更します。
使用方法
@ModifyConstant(
methodName = "getConfig",
oldValue = "dev",
newValue = "prod"
)
public static CallbackInfo hook() { }
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| methodName | String | はい | 定数を含むメソッド |
| oldValue | Object | はい | 元の定数値 |
| newValue | Object | はい | 新しい定数値 |
@ModifyVariable
目的
ローカル変数の値を変更します。
使用方法
@ModifyVariable(
methodName = "process",
variableIndex = 1
)
public static void hook(String param) { }
パラメータ
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| methodName | String | はい | ターゲットメソッド名 |
| variableIndex | int | はい | ローカル変数スロットのインデックス |
列挙型: At
値
| 値 | 説明 |
|---|---|
| HEAD | メソッドの開始位置、すべてのコードの前 |
| RETURN | 各return文の前 |
| TAIL | メソッドの終了位置 |
列挙型: Shift
値
| 値 | 説明 |
|---|---|
| BEFORE | メソッド呼び出しの前にフックを実行 |
| AFTER | メソッド呼び出しの後にフックを実行 |
次のステップ
- クラスとインターフェースをレビュー
- APIリファレンスをチェック
- 例を探索