SlideShare a Scribd company logo
Javaでマサカリ
投げてみた!
@YujiSoftware
「マサカリを投げる」とは
• 技術的な内容に対し
容赦のない厳しい指摘をすること
– 投げられた相手が指摘を冷静にキャッチできず、
大きなダメージを受けてしまう危険な行為
• これをJavaで表現すると、こうなります
マサカリ投げる
throw new Masakari();
このコードの問題点
• コンパイルが通らない
– Javaで投げられるのは例外だけ
(正確にはThrowableを継承したクラスだけ)
– ただのオブジェクトであるマサカリは投げられな
い…
しかし、私はマサカリを投げたい
どうしても投げたい
なんとしてでも投げたい!!
そこで、こんな方法で
コンパイルしてみました
コンパイル方法
1. Masakariクラスを、Exceptionを継承した状態
でコンパイル
public class Masakari extends Exception {
}
コンパイル方法
2. throw new Masakari(); を含んだMainクラス
をコンパイル
public static void main(String... args) throws Exception {
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
try {
throw new Masakari();
} catch (Throwable t) {
System.out.println("Catch Masakari.");
}
}
このコードは、マサカリがスローされたとき、
「Catch Masakari. 」または「Unhandled Masakari.」(コードは省略)と出力
コンパイル方法
3. Masakariクラスを、Exceptionの継承を削除し
た状態に戻し、再度コンパイル
public class Masakari {
}
コンパイル結果
• 2つのクラスができあがる
Masakariクラス(ただのオブジェクト)
Mainクラス(Masakariをスローするクラス)
それでは実行してみましょう!
C:Masakari4j>java Main
C:Masakari4j>java Main
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
Main.main([Ljava/lang/String;)V @25: athrow
Reason:
Type 'Masakari' (current frame, stack[0]) is not assignable to 'java/lang/Throwable'
Current Frame:
bci: @25
flags: { }
locals: { '[Ljava/lang/String;' }
stack: { 'Masakari' }
Bytecode:
0x0000000: bb00 0259 b700 03b8 0004 b200 0512 06b6
0x0000010: 0007 bb00 0859 b700 09bf 4cb2 0005 120b
0x0000020: b600 07b2 0005 120c b600 07a7 000e 4db2
0x0000030: 0005 120c b600 072c bfb1
Exception Handler Table:
bci [10, 26] => handler: 26
bci [10, 35] => handler: 46
Stackmap Table:
same_locals_1_stack_item_frame(@26,Object[#24])
same_locals_1_stack_item_frame(@46,Object[#24])
same_frame(@57)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
なんかわけわからんエラー出た
( ̄▽ ̄;)
何が起きた?
•VerifyErrorが起きた
– VerifyError とは
• クラスファイルの内部矛盾またはセキュリティー上の
問題があることを検出した場合にスローされるエラー
– 要するに…
• マサカリを投げようとしているのがJava VMにばれて実
行できなかった
Javaでマサカリ
投げられない…
…
…って思うでしょ?
最終手段!
•-noverifyオプション
– VerifyErrorを抑止!
• これを付けて実行すると…!
C:Masakari4j>java –noverify Main
Unhandled Masakari.
Javaでマサカリ
投げられる!
そして、コードをよく見ると…
• try...catch… がある!?
– にもかかわらず、catchブロックを通らなかった!
public static void main(String... args) throws Exception {
Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler());
try {
throw new Masakari();
} catch (Throwable t) {
System.out.println("Catch Masakari.");
}
}
Javaでマサカリ
Catchできない!
つまり
これぞまさしくマサカリ!
いかがだったでしょうか
最後に大事なことをお伝えします
注意事項
• マサカリを投げる行為は大変危険です
よい子のみんな
まねしないでね!
Javaでマサカリ
投げてみた!
@YujiSoftware
本LTに対するマサカリは
受け付けていません!
ご了承ください
やさしく教えてください (*^-^*)

More Related Content

PDF
A investigative report of refinements
PPTX
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PDF
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PPTX
Kotlin で android アプリを作ってみた
PDF
KotlinAndroidLibを使ってみた
PDF
エンジニアから飛んでくるマサカリを受け止める心得
PPTX
AtCoderで始めるテスト駆動開発
A investigative report of refinements
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
Kotlin で android アプリを作ってみた
KotlinAndroidLibを使ってみた
エンジニアから飛んでくるマサカリを受け止める心得
AtCoderで始めるテスト駆動開発

Viewers also liked (7)

PDF
Clojure web dev history
PDF
The best of AltJava is Xtend
PDF
MP in Clojure
PDF
Scala製機械学習サーバ「Apache PredictionIO」
PDF
Non-Functional Programming in Scala
PDF
Scala警察のすすめ
PPTX
サーバサイド Kotlin
Clojure web dev history
The best of AltJava is Xtend
MP in Clojure
Scala製機械学習サーバ「Apache PredictionIO」
Non-Functional Programming in Scala
Scala警察のすすめ
サーバサイド Kotlin
Ad

More from YujiSoftware (7)

PPTX
ラムダのコンパイル結果を5分で説明するよ​
PPTX
Javaはどれだけ速いのか
PPTX
Java をクラッシュさせて遊んでみよう!
PPTX
技術書を読むと眠くなる!これを解決するために取った10の対策
PPTX
Java を今すぐダウンロードしてみたお話
PPTX
JVM言語を使ってみようの歌
PPTX
ジャバのはなし、JAVAのはなし、Javaのはなし
ラムダのコンパイル結果を5分で説明するよ​
Javaはどれだけ速いのか
Java をクラッシュさせて遊んでみよう!
技術書を読むと眠くなる!これを解決するために取った10の対策
Java を今すぐダウンロードしてみたお話
JVM言語を使ってみようの歌
ジャバのはなし、JAVAのはなし、Javaのはなし
Ad

Javaでマサカリ投げてみた