SlideShare ist ein Scribd-Unternehmen logo
1 von 30
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に対するマサカリは
受け付けていません!
ご了承ください
やさしく教えてください (*^-^*)

Weitere ähnliche Inhalte

Andere mochten auch

Clojure web dev history
Clojure web dev historyClojure web dev history
Clojure web dev historyIkuru Kanuma
 
The best of AltJava is Xtend
The best of AltJava is XtendThe best of AltJava is Xtend
The best of AltJava is Xtendtakezoe
 
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」takezoe
 
Non-Functional Programming in Scala
Non-Functional Programming in ScalaNon-Functional Programming in Scala
Non-Functional Programming in Scalatakezoe
 
Scala警察のすすめ
Scala警察のすすめScala警察のすすめ
Scala警察のすすめtakezoe
 
サーバサイド Kotlin
サーバサイド Kotlinサーバサイド Kotlin
サーバサイド KotlinHiroki Ohtani
 

Andere mochten auch (7)

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

Mehr von YujiSoftware

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

Mehr von YujiSoftware (7)

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

Kürzlich hochgeladen

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Kürzlich hochgeladen (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

Javaでマサカリ投げてみた