1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

バイトコード検証機能について

Last updated at Posted at 2016-07-04

参照

JavaVMにはバイトコード検証器(Java bytecode verifier)と呼ばれるクラスファイルが正しく作成されたものか判断する機構が備わっている

検査する内容

バイトコード検証機能はオペランドスタックの挙動が意図した挙動を示すかチェックを行う

  • オペランドスタックに積まれた命令がすべて正しく取り出されているか
    • push/popが同じ回数呼び出されているかチェックする。
    • pushを5回/popを8回行うとスタックアンダーフローが発生する
  • オペランドスタックに積まれた値がpush時とpop時で同じ型を表しているか
    • 一部の捜査では異なる型のpush/popを許可しているが原則禁止

バイトコード検証機能の有効/無効

デフォルトではバイトコード検証機能は有効になっている
下記のオプションで有効範囲を選択可能

ネットワーク経由でロードされたクラスに対して検証を行う

java -Xverify:remote ApplicationName

無効にする場合

java -Xverify:none ApplicationName

全てのクラスを強制検査する場合

java -Xverify:all ApplicationName

Androidの場合

adbを利用する場合

有効にする場合

adb shell setprop dalvik.vm.dexopt-flags v=a

無効にする場合

adb shell setprop dalvik.vm.dexopt-flags v=n

dalvikVMもjavaVM同様Xverifyオプションで有効/無効が設定可能

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?