ネイティブライブラリ内で意図的にネイティブレベルのスタックオーバーフローを起こすJNIライブラリです。hs_errが出ないクラッシュを起こします。
昔はこれでhs_errが吐けたのですが、LinuxカーネルかSolarisかの脆弱性の関係で sigaltstack
を使ったエラーハンドリングがなくなったそうです。詳しい経緯は OpenJDKのML をどうぞ。
- Linux x86_64
- Linux AArch64
alloca()
を使うとかいろいろありますが、このサンプルでは確実にスタックのガードページを触るために、アセンブラでプロローグ後にスタックポインタを上へ向かって順次書き込んでいきます。
$ cd build
$ cmake ..
$ make
$ java -Djava.library.path=. -jar NativeStackOverflow.jar