Submit Search
DoActionからJava VMバイトコードに変換する話
0 likes
2,537 views
emorins
1 of 20
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
More Related Content
PDF
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
PPTX
Mvpvm pattern
Mami Shiino
PPTX
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
PDF
講座Java入門
Tokai University
PDF
Java8のstreamをダラダラまとめてみる
Shinya Mochida
PDF
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
PPTX
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
PDF
オブジェクト指向できていますか?
Moriharu Ohzu
ActionScriptを使わないFlash勉強会 #1(前日版)
libpanda
Mvpvm pattern
Mami Shiino
T90 きっと怖くないmvvm & mvpvm
伸男 伊藤
講座Java入門
Tokai University
Java8のstreamをダラダラまとめてみる
Shinya Mochida
社内Java8勉強会 ラムダ式とストリームAPI
Akihiro Ikezoe
LINQ 概要 + 結構便利な LINQ to XML
ShinichiAoyagi
オブジェクト指向できていますか?
Moriharu Ohzu
What's hot
(19)
PDF
C++0x 言語の未来を語る
Akira Takahashi
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
PDF
知って得するC#
Shota Baba
PPTX
Java8勉強会
賢太郎 前多
PDF
クロージャデザインパターン
Moriharu Ohzu
PDF
JavaScript入門-基礎編
mactkg
PPTX
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
PPT
ジェネリクスの基礎とクラス設計への応用
nagise
PDF
Emcpp item31
mitsutaka_takeda
PPTX
T93 com入門
伸男 伊藤
PDF
JavaのGenericsとは?
Kenji Nakamura
PDF
Xtend30分クッキング やきに駆動
Shinichi Kozake
PDF
Xtend30分クッキング
Shinichi Kozake
PPTX
競技プログラミングのためのC++入門
natrium11321
PDF
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
kwatch
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
PPTX
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
PDF
JavaScript 講習会 #1
Susisu
PDF
Scalaでプログラムを作りました
Tomoharu ASAMI
C++0x 言語の未来を語る
Akira Takahashi
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
kwatch
知って得するC#
Shota Baba
Java8勉強会
賢太郎 前多
クロージャデザインパターン
Moriharu Ohzu
JavaScript入門-基礎編
mactkg
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
ジェネリクスの基礎とクラス設計への応用
nagise
Emcpp item31
mitsutaka_takeda
T93 com入門
伸男 伊藤
JavaのGenericsとは?
Kenji Nakamura
Xtend30分クッキング やきに駆動
Shinichi Kozake
Xtend30分クッキング
Shinichi Kozake
競技プログラミングのためのC++入門
natrium11321
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
kwatch
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
なおき きしだ
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
JavaScript 講習会 #1
Susisu
Scalaでプログラムを作りました
Tomoharu ASAMI
Ad
Viewers also liked
(13)
PDF
Hacking swf
Saurabh Mathur
PDF
Billet defects pinhole and blowhole formation prevention and evolution
Jorge Madias
PDF
Android Development: Build Android App from Scratch
Taufan Erfiyanto
PPTX
SWF LOVE (ASを使わないFlash勉強会 #1)
ken39arg
PPTX
Chapter2 (JF302)
Mohd Nurilhadi Darmi
PPTX
Production of iron and steel
temkin abdlkader
PPTX
Iron & steel
Muhammad Mohsin
PPT
Secondary steel making processes
chandrakant jally
PPTX
Steel
Harpreet Oberoi
PPTX
Types of iron and steel
Ellias International Pvt Ltd
PPTX
Steel
Gulfam Hussain
PPT
Casting defects
Gulfam Hussain
PDF
Presentation on steel
Probodh Mallick
Hacking swf
Saurabh Mathur
Billet defects pinhole and blowhole formation prevention and evolution
Jorge Madias
Android Development: Build Android App from Scratch
Taufan Erfiyanto
SWF LOVE (ASを使わないFlash勉強会 #1)
ken39arg
Chapter2 (JF302)
Mohd Nurilhadi Darmi
Production of iron and steel
temkin abdlkader
Iron & steel
Muhammad Mohsin
Secondary steel making processes
chandrakant jally
Steel
Harpreet Oberoi
Types of iron and steel
Ellias International Pvt Ltd
Steel
Gulfam Hussain
Casting defects
Gulfam Hussain
Presentation on steel
Probodh Mallick
Ad
Similar to DoActionからJava VMバイトコードに変換する話
(20)
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
NTT DATA Technology & Innovation
PDF
InvokeDynamic at #shikadriven 2012
Go Tanaka
PDF
JVMの中身を可視化してみた
Kengo Toda
PDF
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
PPT
d-kami x86-2
Daisuke Kamikawa
PDF
Android道第1回公開用
Takaya Funabiki
PPTX
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
PDF
Javaで作る超簡易x86エミュレータ
Daisuke Kamikawa
PDF
d-kami x86-1
Daisuke Kamikawa
PDF
Java SE 7 InvokeDynamic in JRuby
Hiroshi Nakamura
PPTX
Enshu8
sudahiroshi
PDF
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
PDF
V6 unix in okinawa
magoroku Yamamoto
PDF
Mbed2013
lynxeyed
PDF
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
PDF
Var handles jjug_ccc_spring_2018
David Buck
PPTX
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
Kazuyoshi Kamitsukasa
PDF
いでよ、電卓!
Masato Kinugawa
KEY
Actor&stm
潤一 加藤
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
NTT DATA Technology & Innovation
InvokeDynamic at #shikadriven 2012
Go Tanaka
JVMの中身を可視化してみた
Kengo Toda
Dalvikバイトコードリファレンスの読み方 改訂版
Takuya Matsunaga
d-kami x86-2
Daisuke Kamikawa
Android道第1回公開用
Takaya Funabiki
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
Javaで作る超簡易x86エミュレータ
Daisuke Kamikawa
d-kami x86-1
Daisuke Kamikawa
Java SE 7 InvokeDynamic in JRuby
Hiroshi Nakamura
Enshu8
sudahiroshi
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
V6 unix in okinawa
magoroku Yamamoto
Mbed2013
lynxeyed
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
Var handles jjug_ccc_spring_2018
David Buck
jvmlang.daitokai 1.0.0 MinCamlJを作ってみた
Kazuyoshi Kamitsukasa
いでよ、電卓!
Masato Kinugawa
Actor&stm
潤一 加藤
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
DoActionからJava VMバイトコードに変換する話
1.
DoActionからJava VMバイトコー
ドに変換する話 恵森 将太郎(@emorins)
2.
何やるか
DoActionから Java VMバイトコード に変換
3.
どうやってやるか
SWFの解析 ↓ DoActionタグの解析 ↓ Actionタグの解析 ↓ Actionタグから対応するJavaVM バイトコードに変換 ↓ classファイルの生成 Java VMで実行
4.
最終的な目標 ・ActionScriptでJavaアプリの開発 ・swfからJavaアプリへの変換 あるいは今回はJava VMですが、Dalvik VMバイトコードにして、 ・swfからAndroidアプリケーションへの変換 ・ActionScriptでAndroidアプリの開発など
5.
今日具体的にやること 簡単な加算演算と変数への 代入を変換
6.
ActionScriptコード i = 4; i
= 2 + 3; Flash lite 1.1 (swf v4)
7.
DoActionタグのContents
009603000069009603 000034001d960300 0069009603000035 001d00
8.
アクション ActionPush 値をスタックにpush ACTIONRECORDHEADER
オペコード:0x96 Length Type 0 = 文字列リテラル 1 = 浮動小数点数リテラル 値
9.
アクション ActionSetVariable スタックから値をpop、次に変数をpopし、変数に値をセット ACTIONRECORDHEADER
オペコード:0x1d
10.
アクション 0: ActionPush: i 1:
ActionPush: 4 2: ActionSetVariable: 3: ActionPush: i 4: ActionPush: 5 5: ActionSetVariable:
11.
スタックの流れ
4 → → 5 → i i 0,1 2 3 4 i,4をpush 順に変数名、 i,5をpush 順に変数名、 値をpopし、 値をpopし、 セット セット
12.
Javaコード class Main{
public static void main(String[] args){ int i = 4; i = 2 + 3; } }
13.
演算しているところのバイト列
073C083CB1
14.
Javaバイトコード % javap -c
Main Compiled from "Main.java" class Main extends java.lang.Object{ Main(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_4 1: istore_1 2: iconst_5 3: istore_1 4: return }
15.
命令セット iconst_<i> int 定数をオペランド・スタックへpush オペコード:iconst_4=0x7, iconst_5=0x8 istore_<n> オペランド・スタックの先頭から(int型)のvalueをpopし、 ローカル変数nにセット オペコード:iconst_1=0x3c
16.
スタックの流れ
→ → → 4 5 0 1 2 3 4をpush 先頭からpop 5をpush 先頭からpop し変数に代入 し変数に代入
17.
評価器がスタックマシンでどっちも似てるね
18.
変換する ActionPush: i
はいらないね ActionPush: 4 はiconst_4に変換 ActionSetVariableで、istore_1 あとはローカル変数テーブルとか用意しないと駄目だけど割愛
19.
変換したバイトデータを.classで保存 ちゃんとJava VMバイトコードに変換できているか確認 % javap
-c Main Compiled from "Main.java" class Main extends java.lang.Object{ Main(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_4 1: istore_1 2: iconst_5 3: istore_1 4: return }
20.
ご清聴ありがとうございました
Download