Slide 1

Slide 1 text

ϓϩάϥϛϯάύϥμΠϜ .JOFSP"PLJ

Slide 2

Slide 2 text

࢒೦ͳ͓஌Βͤ

Slide 3

Slide 3 text

ϓϩάϥϛϯά
 ύϥμΠϜͷ
 ࿩ͳΜͯ
 Ұ੾͠·ͤΜ

Slide 4

Slide 4 text

͙͢ʹ໾ʹཱͨͳ͍ ͜ͱΛֶͿ

Slide 5

Slide 5 text

͙͢ʹ໾ཱͭ஌ࣝ͸ ͙͢໾ʹཱͨͳ͘ͳΔ

Slide 6

Slide 6 text

՝୊આ໌

Slide 7

Slide 7 text

՝୊ +BWB4DSJQUίϯύΠϥΛ࣮૷ͤΑ

Slide 8

Slide 8 text

ʜʜͱ͍͏ͷ͸
 ͕͢͞ʹ࣌ؒతʹແཧͳͷͰɺ

Slide 9

Slide 9 text

՝୊ +BWB4DSJQUίϯύΠϥͷ
 ίʔυδΣωϨʔλʔΛ࣮૷ͤΑ

Slide 10

Slide 10 text

+BWB4DSJQUʹ͍ͭͯ͸ͪ͜Β l&$."4DSJQU-BOHVBHF4QFDJpDBUJPOz IUUQXXXFDNBJOUFSOBUJPOBMPSHQVCMJDBUJPOT pMFT&$."45&DNBQEG

Slide 11

Slide 11 text

ࠓ೔࣮૷͢Δػೳ w ੔਺Ϧςϥϧʢ ʣ w Ճࢉʢʣ w ৚݅ԋࢉࢠʢD UFʣͱJGจ w ؔ਺ݺͼग़͠ͱҾ਺ͷࢀরɺSFUVSOจ w ؆୯ͳ࠷దԽ w BOENPSF

Slide 12

Slide 12 text

ίϯύΠϥͷجૅͱ +FU4QJEFS

Slide 13

Slide 13 text

+FU4QJEFS w +FU4QJEFS͸ࠓճͷΠϯλʔϯઐ༻ʹ։ൃͨ͠ +BWB4DSJQUίϯύΠϥ w 'JSFGPYͷ+BWB4DSJQU࣮૷Ͱ͋Δ4QJEFS.POLFZ 7.༻ͷόΠτίʔυΛੜ੒͢Δ w ίϯύΠϥͷKFUTQJEFSίϚϯυͱɺ7.ͷKTWNί Ϛϯυ͔Β੒Δ

Slide 14

Slide 14 text

ΠϯλʔϓϦλʔʹΑΔ࣮ߦ ίϯύΠϥʔʹΑΔ࣮ߦ ίϯύΠϥʔͱΠϯλϓϦλʔ ػցޠίʔυ ιʔείʔυ ίϯύΠϥʔ ίϯϐϡʔλʔ ιʔείʔυ ධՁث ࣮ߦ ࣮ߦ

Slide 15

Slide 15 text

7.ʹΑΔ࣮ߦ όʔνϟϧϚγϯ w ιϑτ΢ΣΞͰߏஙͨ͠ί ϯϐϡʔλʔ͕όʔνϟϧ Ϛγϯʢ7.7JSUVBM .BDIJOFʣ w +BWB7.͕༗໊͕ͩɺ࠷ۙ ͷΠϯλʔϓϦλʔ͸΄΅ ͜Ε w +BWB7.ͷίʔυ͸όΠτ ίʔυͱݺ͹ΕΔ ಺෦ίʔυ ιʔείʔυ ίϯύΠϥʔ 7. ࣮ߦ

Slide 16

Slide 16 text

4QJEFS.POLFZʢ$ʣ ಠࣗʹ࡞ͬͨ෦෼ʢ3VCZ$ʣ +FU4QJEFSͷΞʔΩςΫνϟ όʔνϟϧϚγϯ ίϯύΠϥʔ +BWB4DSJQU όΠτίʔυ KTDϑΝΠϧ +BWB4DSJQU ίϯύΠϥʔ ϩʔμʔ KTWNίϚϯυ KFUTQJEFSίϚϯυ

Slide 17

Slide 17 text

+FU4QJEFSͷೖख w ҎԼͷϨϙδτϦΛ֎ͷ(JU)VCʢ()&Ͱ͸ͳ͍ʣ ͰGPSLɺDMPOF͍ͯͩ͘͠͞ w IUUQTHJUIVCDPNBBNJOFKFUTQJEFSDPVSTFHJU w DMPOFઌʹDEͯ͠CVOEMFJOTUBMM

Slide 18

Slide 18 text

Φϓγϣϯ͸IFMQʹฉ͚ % ./bin/jetspider --help jetspider [options] {JS_FILE | -e SOURCE} --dump-tokens Dumps lexical tokens and quit. --dump-ast Dumps AST and quit. --dump-semantic Dumps semantic tree and quit. --dump-object Dumps object file and quit. -e, --source=TEXT Give source code from option. --help Prints this message and quit. % ./bin/jsvm --help Usage: ./bin/jsvm [options] SOURCE Options: -p, --print Executes source and print the last result. -t, --trace Executes source with tracing. -d, --disassemble Disassembles source.

Slide 19

Slide 19 text

ίϯύΠϥͷҰൠతͳߏ੒ ύʔαʔʢQBSTFSʣ ҙຯղੳثʢTFNBOUJDBOBMZ[FSʣ ΦϓςΟϚΠβʔʢPQUJNJ[FSʣ ίʔυδΣωϨʔλʔʢDPEFHFOFSBUPSʣ ιʔείʔυ ࣮ߦՄೳίʔυ ϑΣΠζߏจղੳ ϑΣΠζҙຯղੳ ϑΣΠζ࠷దԽ ϑΣΠζίʔυੜ੒

Slide 20

Slide 20 text

+FU4QJEFSͷ࣮૷ঢ়گ ύʔαʔʢQBSTFSʣ ҙຯղੳثʢTFNBOUJDBOBMZ[FSʣ ΦϓςΟϚΠβʔʢPQUJNJ[FSʣ ίʔυδΣωϨʔλʔʢDPEFHFOFSBUPSʣ +BWB4DSJQUʢKTʣ 4QJEFS.POLFZόΠτίʔυʢKTDʣ ະ׬੒ ͳ͍

Slide 21

Slide 21 text

+FU4QJEFSͷιʔεπϦʔ w CJO w KFUTQJEFSίϯύΠϥʔ w KTWN7. w MJCKFUTQJEFS w DPNQJMFSSCίϯύΠϥυϥΠόʔ w QBSTFSSCύʔαʔ w SFTPMWFSSCҙຯղੳث w DPEF@HFOFSBUPSSCίʔυδΣωϨʔλʔ w BTTFNCMFSSCόΠτίʔυ%4- w PCKFDU@pMFSC+4$ϑΝΠϧ ͜͜Λॻ͘

Slide 22

Slide 22 text

ίϯύΠϧͷաఔ

Slide 23

Slide 23 text

ϑΣΠζߏจղੳ w ιʔείʔυʢςΩετʣ ͷߏจΛνΣοΫ͢Δ ͱಉ࣌ʹɺѻ͍΍͍͢ Α͏πϦʔߏ଄ʢ"45 "CTUSBDU4ZOUBY5SFFʣ ΁ม׵͢Δ JG J \ QSJOU J ^FMTF\ J ^ JG DBMM QSJOU J J UIFO FMTF MIT SIT GVODUJPO BSHT J MFGU SJHIU DPOE

Slide 24

Slide 24 text

ࣈ۟ղੳ w ߏจղੳͰ͸·ͣιʔε ίʔυʢจࣈͷྻʣΛ τʔΫϯʢ୯ޠʣͷྻ ʹ෼ׂ͢Δ w ίϝϯτ΍ۭന͸͜ͷ ஈ֊Ͱফͯ͠͠·͏
 ʢ͜ͱ͕ଟ͍ɻ+4΍3VCZʹ͸҉໧ͷจ ऴ୺͕͋ΔͨΊվߦͷ৘ใ͸࢒͢ඞཁ ͕͋Δɻ+BWB%PD΍42-ώϯτͳͲί ϝϯτ͕ඞཁͳ৔߹΋͋Δʣ lJG J \aOQSJOU J aO^FMTF \aOJaO^z JG lz J lz \ laOz QSJOU J laOz ^ lz FMTF lz \ laOl J ll ʜʜ

Slide 25

Slide 25 text

τʔΫϯྻΛݟΔ % ./bin/jetspider js/arith.js --dump-tokens FUNCTION function S " " IDENT f ( ( IDENT x ) ) S " " { { S "\n " RETURN return S " " NUMBER 1 S " " + + S " " IDENT x S " " * * S " " NUMBER 3 ; ; S "\n" } } S "\n" KFUTQJEFSEVNQUPLFOT'*-&KT GVODUJPOG Y \ SFUVSOY ^ ˝ιʔείʔυʢKTBSJUIKTʣ

Slide 26

Slide 26 text

JGจ จ ؔ਺ݺͼग़͠ ൺֱࣜ ڱٛͷߏจղੳ w τʔΫϯྻͷύλʔϯ͔ΒɺΑΓେ͖ͳߏ଄Λൃݟ ͍ͯ͘͠ w ൃݟͨ͠ΒπϦʔʹ͢Δ JG J \ QSJOU J ʜʜ

Slide 27

Slide 27 text

"45ΛݟΔ % ./bin/jetspider --dump-ast js/arith.js type: SourceElementsNode value: - type: FunctionDeclNode value: f arguments: - type: ParameterNode value: x function_body: type: FunctionBodyNode value: type: SourceElementsNode value: - type: ReturnNode value: type: AddNode left: type: NumberNode value: 1 value: type: MultiplyNode left: type: ResolveNode value: x value: type: NumberNode value: 3 KFUTQJEFSEVNQBTU'*-&KT GVODUJPOG Y \ SFUVSOY ^ ˝ιʔείʔυʢKTBSJUIKTʣ WBMVF "EE/PEF /VNCFS/PEF .VMUJQMZ/PEF 3FTPMWF/PEF /VNCFS/PEF 3FUVSO/PEF WBMVF MFGU WBMVF MFGU WBMVF WBMVFY WBMVF

Slide 28

Slide 28 text

ϑΣΠζҙຯղੳ w ม਺ࢀরͱม਺એݴΛ݁ͼ͚ͭͨΓɺܕνΣοΫΛ ͨ͠Γ͢Δ w "45ʹ্هͷ৘ใΛ෇Ճͨ͠σʔλߏ଄ʢதؒίʔ υʣΛग़ྗ͢Δɻ"45Λͦͷ··࢖͏৔߹΋͋Ε͹ɺ όΠτίʔυʹ͍ۙίʔυΛ࢖͏͜ͱ΋͋Δ w +FU4QJEFSͰ͸ࢀর৘ใ෇͖ͷ"45Λग़ྗ͢Δ

Slide 29

Slide 29 text

தؒίʔυΛݟΔ % ./bin/jetspider --dump-sem js/arith.js - type: FunctionDeclNode value: f arguments: - type: ParameterNode value: x function_body: type: FunctionBodyNode value: type: SourceElementsNode value: - type: ReturnNode value: type: AddNode left: type: NumberNode value: 1 value: type: MultiplyNode left: type: ResolveNode value: x ref: "[function f]:param:x" value: type: NumberNode value: 3 - type: SourceElementsNode value: - KFUTQJEFSEVNQTFNBOUJD'*-&KT "EE/PEF /VNCFS/PEF .VMUJQMZ/PEF 3FTPMWF/PEF /VNCFS/PEF 3FUVSO/PEF WBMVF MFGU WBMVF MFGU WBMVF WBMVF WBMVFY WBMVF WBMVFY QBSBNY 1BSBNFUFS/PEF 'VODUJPO%FDM/PEF BSHVNFOUT 7BSJBCMFΦϒδΣΫτ

Slide 30

Slide 30 text

ϑΣΠζ࠷దԽ w ϓϩάϥϜͷҙຯΛม͑ͣʹ࣮ߦ଎౓Λ଎͘͠ ͨΓɺ࢖༻ϝϞϦྔΛݮΒ͢ͳͲͷվળΛߦ͏ w ఻౷తʹ͸ҙຯղੳͱίʔυੜ੒ͷؒʹҐஔ෇͚Β ΕΔ͕ɺίϯύΠϧͷ͋ΒΏΔஈ֊Ͱߦ͏͜ͱ͕Ͱ ͖Δ w ࠷ۙ͸ϦϯΫ࣌࠷దԽͱ͍͏΋ͷ΋͋ΔFH--7. w +FU4QJEFSͰ͸࠷దԽΛʢ·ͩʣߦ͍ͬͯͳ͍

Slide 31

Slide 31 text

ϑΣΠζίʔυੜ੒ w ҙຯղੳࡁΈͷσʔλ Λݩʹɺػցޠ΍7.ίʔ υΛੜ੒͢Δ w ࣮ࡍ͸ίʔυ͚ͩͰ͸ ͳ͘ɺγϯϘϧςʔϒϧ ʢม਺දʣ΍ϦϯΫ৘ ใ΋ؚΉΦϒδΣΫτϑΝ ΠϧΛੜ੒͢Δ "EE/PEF /VNCFS/PEF .VMUJQMZ/PEF 3FTPMWF/PEF /VNCFS/PEF 3FUVSO/PEF WBMVF MFGU WBMVF MFGU WBMVF WBMVF WBMVFY YQBSBN WBMVF dd 01 int8 1 54 00 00 getarg 0 dd 03 int8 3 1d mul 1b add 05 return

Slide 32

Slide 32 text

ίϯύΠϧ͢Δ KFUTQJEFS'*-&KT % ./bin/jetspider js/arith.js % ls -l js/arith.jsc -rw-r--r-- 1 minero-aoki staff 228 Aug 25 10:59 js/arith.jsc w KTϑΝΠϧΛࢦఆ͢Δ͚ͩ Ͱ0, w ֦ுࢠΛKTDʹม͑ͨϑΝ Πϧʢ+4$ϑΝΠϧʣ͕ੜ੒ ͞ΕΔ

Slide 33

Slide 33 text

+4$ϑΝΠϧΛݟΔ KFUTQJEFSEVNQPCKFDU'*-&KT % ./bin/jetspider --dump-obj js/arith.js - n_vars: 0 n_args: 1 vars: - x prolog_length: 0 js_version: 185 n_fixed: 0 script_bits: 32 code: - dd 01 int8 1 - 54 00 00 getarg 0 - dd 03 int8 3 - 1d mul - 1b add - 05 return - c5 stop srcnotes: '' filename: js/arith.js lineno: 1 n_slots: 3 static_level: 1 atoms: [] blocks: [] upvars: [] regexps: [] closed_args: [] closed_vars: [] trynotes: [] consts: [] - n_vars: 0 n_args: 0 ҎԼུ w όΠτίʔυ͚ͩͰ͸ͳ͘ɺ +4$ϑΝΠϧͷ߲໨͕͢΂ͯ දࣔ͞ΕΔ w ౰વ͚ͩͲίʔυδΣωϨʔ λʔ͕׬੒͍ͯ͠ͳ͍ͱΤ ϥʔʹͳͬͯ͠·͏ w ࣮૷ͨ݁͠ՌΛ֬ೝ͢Δͨ Ίʹ࢖༻

Slide 34

Slide 34 text

+4$ϑΝΠϧͷߏ଄ w 4QJEFS.POLFZ಺Ͱ͸ؔ਺ ఆٛͭʹରͯ͠TUSVDU +4'VODUJPO͕ͭੜ੒͞Ε Δ w +4$ϑΝΠϧʹ͸ιʔεϑΝ ΠϧͰఆٛ͞Εͨ͢΂ͯͷؔ ਺ʹରԠ͢ΔTUSVDU +4'VODUJPO͕֨ೲ͞ΕΔ w ࠷ޙͷͭ͸ৗʹTUSVDU +44DSJQUͰϝϯόʔ͕গͳ͍ +4$ϑΝΠϧ TUSVDU+4'VODUJPO TUSVDU+4'VODUJPO TUSVDU+44DSJQU UPQMFWFM NBHJD Y%&"%# ؔ਺ͷ਺ʢ͸τοϓϨϕϧʣ

Slide 35

Slide 35 text

+FU4QJEFSͰ ίʔυΛੜ੒͢Δ

Slide 36

Slide 36 text

࿅श໰୊ w ੔਺ఆ਺ʢ/VNCFS/PEFʣΛ࣮૷ͤΑ w KTOVNCFSKT͕ಈ࡞͢ΔΑ͏ʹ࣮૷͠Α͏ w ූ߸෇͖Ϗοτ੔਺ΛQVTI͢ΔzJOUz໋ྩΛ࢖͏

Slide 37

Slide 37 text

՝୊ͷ࣮૷εςοϓ ࣮૷͢΂͖+BWB4DSJQUͷίʔυΛ֬ೝ͢Δ
 ʢͰ͖Δ͚ͩγϯϓϧͳ+4ίʔυΛ༻ҙ͠Α͏ʂʣ KFUTQJEFSEVNQBTU TFNͰ"45ΛݟΔ KTWNE EJTBTTFNCMF Ͱʮ౴͑ʯͷόΠτίʔυΛݟΔ $PEF(FOFSBUPSͷϝιουΛ࣮૷͢Δ KFUTQJEFSEVNQPCKͰग़ྗ݁ՌΛ֬ೝ͢Δ ίϯύΠϧ͠ɺKTWNQSJOUͰ࣮ߦ͢Δ

Slide 38

Slide 38 text

"45ΛݟΔ % ./bin/jetspider --dump-ast js/number.js type: SourceElementsNode value: - type: ExpressionStatementNode value: type: NumberNode value: 77 ʮจʯͷϦετΛද͢ϊʔυ ͭͷ͔ࣜΒͳΔ ʮจʯͷϊʔυ ੔਺Ϧςϥϧ
 ͷϊʔυ

Slide 39

Slide 39 text

ʮਖ਼ղʯΛݟΔ w KTWNE EJTBTTFNCMF ίϚϯυͰ4QJEFS.POLFZ ʹΑΔίϯύΠϧ݁ՌΛݟΔ͜ͱ͕Ͱ͖Δ w τοϓϨϕϧΛٯΞηϯϒϧ w ಛఆͷؔ਺ΛٯΞηϯϒϧ jsvm -d ϑΝΠϧ໊.js jsvm -d ϑΝΠϧ໊.js ؔ਺໊

Slide 40

Slide 40 text

OVNCFSKTͷٯΞηϯϒϧ % ./bin/jsvm -d js/number.js main: 00000: dd 4d int8 77 00002: 02 popv 00003: c5 stop ‣ Θ͔Βͳ໋͍ྩ͕͋ͬͨΒ(3061"%ͷόΠτ ίʔυϦϑΝϨϯεͰ֬ೝ /VNCFS/PEFͰग़ྗ͢΂͖෦෼ &YQSFTTJPO4UBUFNFOU/PEF͕ग़ྗ τοϓϨϕϧͱؔ਺ͷ຤ඌͰࣗಈग़ྗ

Slide 41

Slide 41 text

"45ͷτϥόʔε w USBWFSTFπϦʔͷϊʔ υΛॱ൪ʹͨͲ͍ͬͯ ͘ૢ࡞ w खଓ͖ܕݴޠͳΒ࠶ؼ ݺͼग़͠ɺ001Ͱ͸ 7JTJUPSύλʔϯΛ࢖͏ ͷ͕ఆੴ τϥόʔεʢUSBWFSTFʣ "EE/PEF /VNCFS/PEF .VMUJQMZ/PEF 3FTPMWF/PEF /VNCFS/PEF 3FUVSO/PEF ̍ ̎ ̏ ̐ ̑ ̒

Slide 42

Slide 42 text

7JTJUPSύλʔϯͰ
 "45Λτϥόʔε͢Δ DMBTT"457JTJUPS EFGWJTJU@3FUVSO/PEF OPEF WJTJUOPEFWBMVFˡSFUVSOจͷࣜΛτϥόʔε FOE EFGWJTJU@"EE/PEF OPEF WJTJUOPEFMFGUˡlzͷࠨଆͷࢬΛτϥόʔε WJTJUOPEFWBMVFˡlzͷӈଆͷࢬΛτϥόʔε FOE EFGWJTJU@/VNCFS/PEF OPEF ੔਺Ϧςϥϧʹ͸ͨͲΔࢬ͕ͳ͍ʢMFBGʣ FOE FOE "EE/PEF /VNCFS/PEF /VNCFS/PEF 3FUVSO/PEF

Slide 43

Slide 43 text

WJTJUϝιουͷ࣮૷ w ଞͷݴޠͩͱେม͕ͩ3VCZͳΒ@@TFOE@@ͰҰൃ EFGWJTJU OPEF @@TFOE@@ lWJTJU@\OPEFDMBTT^z FOE

Slide 44

Slide 44 text

όΠτίʔυͷग़ྗ w "TTFNCMFSΦϒδΣΫτʹఆٛ͞Ε͍ͯΔɺόΠ τίʔυͱಉ໊ͷϝιουΛݺ΂͹Α͍ w $PEF(FOFSBUPSΫϥε಺Ͱ͸!BTNʹ"TTFNCMFS ΦϒδΣΫτ͕ೖ͍ͬͯΔ w ྫ w !BTNQPQ w !BTNHFUBSH

Slide 45

Slide 45 text

+4$ϑΝΠϧΛ࣮ߦ͢Δ w KTWNίϚϯυʹKTDϑΝΠϧΛࢦఆ͢Δͱɺͦͷ ίʔυΛ࣮ߦ͢Δ w QSJOUΦϓγϣϯ෇͖ͩͱɺ࣮ߦͨ͋͠ͱ࠷ޙͷࣜ ͷ஋Λදࣔ͢Δ w ؔ਺ݺͼग़͠Λ࣮૷͢Δ·Ͱ͸஋ΛදࣔͰ͖ͳ͍ ͷͰɺ͜ͷΦϓγϣϯͰ݁ՌΛ֬ೝ͢Δ KTWN'*-&KTD KTWNQSJOU'*-&KTD

Slide 46

Slide 46 text

࿅श໰୊ w llԋࢉࢠʢ"EE/PEFʣΛ࣮૷ͤΑ w KTBEEKT KTBEEKTΛಈ࡞ͤ͞Α͏ w lzԋࢉࢠʢ4VCUSBDU/PEFʣͷ࣮૷͕ࢀߟʹͳΔ w BEEKT BEEKTͰొ৔͢Δάϩʔόϧม਺POF UXP UISFFʹ͸ͦΕͧΕ ੔਺ ͕ࣄલʹ୅ೖͯ͋͠ΔʢKTWNͷಠࣗ࢓༷ʣ w ͷΑ͏ʹϦςϥϧ͚ͩͷՃࢉͩͱɺ࠷దԽ͞ΕͯՃࢉࣗମ͕ফ໓ ͯ͠͠·͏ͷͰɺม਺Λ࢖ͬͯ࠷దԽΛճආ͍ͯ͠Δʜʜ

Slide 47

Slide 47 text

4QJEFS.POLFZ7. ࣮ߦͷ࢓૊ΈʢʣελοΫ w 4QJEFS.POLFZͷ7.͸ελο ΫϚγϯ w ໋֤ྩ͸ɺ7.ελοΫͷઌ ಄ʹ஋ΛੵΉʢQVTIʣɺऔ Γग़ͯ͠ܭࢉ͢ΔʢQPQʣɺ ࢀরͯ͠ܭࢉ͢Δɺͷ͍ͣ Ε͔ͷॲཧΛߦ͏ʢ૊Έ߹ Θͤ΋ΞϦʣ w DGϨδελϚγϯ int8 5 add int8 3 return QPQ QVTI QVTI QVTI HFU

Slide 48

Slide 48 text

7.ͷಈ࡞ΛݟΔ w KTWNʹUSBDFΦϓγϣ ϯΛ෇͚࣮ͯߦ͢ΔͱҎ Լͷ಺༰΋ग़ྗͰ͖Δ w ࣮ߦ͠Α͏ͱ͍ͯ͠Δ όΠτίʔυ w QVTIͱQPQ w มԽޙͷ7.ελοΫ KTWNUSBDF'*-&KTD % ./bin/jsvm --trace js/lvar.js 1: 00000: 00 nop stack: 6: 00001: f1 00 00 callglobal "f" stack: function f() {\n var a = 1, b;\n p(a);\n} undefined 6: 00004: 3a 00 00 call 0 inputs: f, f @ 2 output: (void 0) @ 0 stack: 2: 00000: 3f one output: 1 @ 1 stack: 1 2: 00001: 57 00 00 setlocal 0 inputs: 1 @ 1 output: (void 0) @ 0 stack: 2: 00005: 56 00 01 getlocal 1 output: b @ 1 stack: undefined 2: 00008: 51 pop inputs: b @ 1 stack: 3: 00009: d9 00 00 callgname "p" ....

Slide 49

Slide 49 text

࿅श໰୊ w &YQSFTTJPO4UBUFNFOUϊʔυʢͭ·ΓʮจʯʣͰ QPQ໋ྩʢQPQW໋ྩʣΛൃߦ͍ͯ͠Δͷ͸Կͷͨ Ί͔ʁ w QPQ໋ྩΛൃߦ͠ͳ͔ͬͨΒԿ͕ى͖Δͷ͔͔֬Ί Α͏

Slide 50

Slide 50 text

৚݅෼ذͱ δϟϯϓ໋ྩ

Slide 51

Slide 51 text

՝୊ w ৚݅ԋࢉࢠʢB CDʣΛ࣮૷ͤΑ w KTDPOEFYQSKTΛಈ͔ͦ͏ w ͏·͘ॻ͘ͱδϟϯϓ໋ྩʢJGFR HPUPʣͭͰࡁΉ

Slide 52

Slide 52 text

4QJEFS.POLFZ7.
 ࣮ߦͷ࢓૊Έʢʣ1$ w ໋ྩ͸όΠτҎ্ͰɺՄม௕ɻ ྫ͑͹͔͚ࢉΛ͢ΔNVM໋ྩ͸ Y%ͷόΠτ w 1$ 1SPHSBN$PVOUFS Ϩδε λʔ͸ݱࡏ࣮ߦதͷʢ͜Ε͔Β ࣮ߦ͢ΔʣόΠτίʔυҐஔΛ ࢦ͢ w 1$͕ࢦ໋͢ྩΛ࣮ߦͯ͠1$Λ ࣍ʹਐΊΔɺ͕7.ͷجຊͷಈ͖ dd 01 int8 1 54 00 00 getarg 0 dd 03 int8 3 1d mul 1b add 05 return 1$ dd 01 int8 1 54 00 00 getarg 0 dd 03 int8 3 1d mul 1b add 05 return 1$ ஋ ஋ HFUBSHΛ࣮ߦ

Slide 53

Slide 53 text

4QJEFS.POLFZ7. ࣮ߦͷ࢓૊Έʢʣແ৚݅δϟϯϓ w ແ৚݅δϟϯϓ໋ྩ HPUP͸1$Λมߋ͢Δ w ʮHPUPʯ͸
 ʮ1$Λʯ͢ΔޮՌ ͕͋Δ .... 07 00 0f ifeq 15 d9 00 00 callgname 0 dd 07 int8 7 3a 00 01 call 1 51 pop 06 00 0c goto 12 d9 00 00 callgname 0 dd 09 int8 9 3a 00 01 call 1 51 pop c5 stop 1$ ஋ .... 07 00 0f ifeq 15 d9 00 00 callgname 0 dd 07 int8 7 3a 00 01 call 1 51 pop 06 00 0c goto 12 d9 00 00 callgname 0 dd 09 int8 9 3a 00 01 call 1 51 pop c5 stop 1$ ஋

Slide 54

Slide 54 text

4QJEFS.POLFZ7. ࣮ߦͷ࢓૊Έʢʣ৚݅෇͖δϟϯϓ w ʮJGFRʯ͸ʮελο Ϋઌ಄͕GBMTFͳΒ1$ Λʯ
 ͨͿΜɺʮUSVFͳΒͦͷ··࣍ͷ໋ྩʹߦ͖ɺGBMTFͳ Βඈ΂ʯͱ͍͏ҙਤͩͱࢥ͏͚Ͳʜʜɻ
 ͪͳΈʹJGFRͱ͍͏໊લͷͤ͘ʹ౳Ձൺֱ΋͠ͳ͍ɻ .... 07 00 0f ifeq 15 d9 00 00 callgname 0 dd 07 int8 7 3a 00 01 call 1 51 pop 06 00 0c goto 12 d9 00 00 callgname 0 dd 09 int8 9 3a 00 01 call 1 51 pop c5 stop 1$ ஋ .... 07 00 0f ifeq 15 d9 00 00 callgname 0 dd 07 int8 7 3a 00 01 call 1 51 pop 06 00 0c goto 12 d9 00 00 callgname 0 dd 09 int8 9 3a 00 01 call 1 51 pop c5 stop 1$ ஋

Slide 55

Slide 55 text

+FU4QJEFSͰͷ ٯॱํ޲΁ͷδϟϯϓ w ਐߦํ޲ͱٯ΁δϟϯϓ͢Δͱ͖͸ɺ !BTNMPDBUJPOΛ࢖͏ MPD!BTNMPDBUJPO ʢͳʹ໋͔ྩʣˡMPD͸͜ͷ໋ྩͷΦϑηοτΛࢦ͢-PDBUJPO !BTNHPUPMPDˡMPDͷҐஔ΁δϟϯϓʢ໭Δʣ

Slide 56

Slide 56 text

+FU4QJEFSͰͷ ਐߦํ޲΁ͷδϟϯϓ w ਐߦํ޲΁δϟϯϓ͢Δͱ͖͸ɺ·ͩੜ੒͍ͯ͠ͳ͍ίʔ υͷҐஔ͕ඞཁʹͳΔ w !BTNMB[Z@MPDBUJPOͰ۩ମతͳ஋ͷຒ·͍ͬͯͳ͍ -PDBUJPOΦϒδΣΫτΛੜ੒͠ɺδϟϯϓ͍ͨ͠ઌͰ pY@MPDBUJPOΛݺΜͰ஋ΛຒΊΔ MPD!BTNMB[Z@MPDBUJPO
 !BTNHPUPMPDˡMPD΁δϟϯϓ
 
 !BTNpY@MPDBUJPO MPD ˡMPDͷҐஔΛఆٛ
 ʢԿ໋͔ྩʣ

Slide 57

Slide 57 text

ؔ਺ͷݺͼग़͠

Slide 58

Slide 58 text

՝୊ w ؔ਺ݺͼग़͠ʢ'VODUJPO$BMM/PEFʣΛ࣮૷ͤΑɻ ·ͣ͸άϩʔόϧؔ਺ͷΈαϙʔτ͠Α͏ɻ w KTGVODBMMKTΛಈ͔ͦ͏ɻ w Q͸ࣄલʹఆٛ͞Εͨؔ਺Ͱɺ3VCZͷQͱಉ͘͡ΦϒδΣΫτΛ͍͍ײ͡ʹ දࣔ͢Δಇ͖͕͋Δɻ w ώϯτ໋ྩͷγʔέϯε͸࣍ͷͱ͓Γɻ DBMMHOBNFlؔ਺໊zˡؔ਺Λऔಘͯ͠ελοΫʹϓογϡ ୈҾ਺ΛελοΫʹϓογϡ ୈҾ਺ΛελοΫʹϓογϡ ʜʜ DBMMҾ਺ͷ਺

Slide 59

Slide 59 text

՝୊ w Ҿ਺ͷࢀরͱɺSFUVSOจΛ࣮૷ͤΑɻ w KTSFUVSOKT KTQBSBNKT͕ಈ࡞͢ΔΑ͏ʹ͠Α͏ɻ w ؔ਺ఆٛࣗମ͸͢Ͱʹ࣮૷͞Ε͍ͯΔɻ w ϩʔΧϧม਺͸·ͬͨ͘ҧ͏ରԠ͕ඞཁɻ·࣮ͩ૷͠ͳͯ͘Α͍ɻ w HFUBSH໋ྩͷҾ਺͸ม਺໊Ͱ͸ͳ͘ύϥϝʔλʔ*%ɻ
 ύϥϝʔλʔ*%͸ɺ3FTPMWF/PEF͔ΒOPEFWBSJBCMFJOEFYͰऔΕΔɻ

Slide 60

Slide 60 text

࠷దԽͱ ϓϩάϥϜͷҙຯ

Slide 61

Slide 61 text

՝୊ w ੔਺Ϧςϥϧ͕zzͷͱ͖͸JOU໋ྩͰ͸ͳ͘POF ໋ྩΛ࢖͏Α͏࠷దԽͤΑ w KTPQUPOFKT͕࠷దԽ͞ΕΔΑ͏ʹ͠Α͏ w lzԋࢉͷఆ਺৞ΈࠐΈΛ࣮૷ͤΑ w "45ϨϕϧͰॲཧ͢Δํ๏ͱɺόΠτίʔυϨϕϧͰॲཧ͢Δํ๏ͷͭ ͕ߟ͑ΒΕΔɻ"45ϨϕϧͰॲཧͯ͠͠·͏ͷָ͕ɻ w KTPQUBEEKTͰBEE໋ྩ͕ൃߦ͞Εͳ͍Α͏ʹ͠Α͏

Slide 62

Slide 62 text

୅දతͳ࣮ߦ଎౓࠷దԽ w ໋ྩڧ౓ͷ௿ݮ w JOU EE ˠPOF G w YˠY w ఆ਺ͷίϯύΠϧ࣌ܭࢉʢఆ਺৞ΈࠐΈʣ w QSJOU J ˠQSJOU J w ॲཧͷϧʔϓ֎΁ͷҠಈ w GPS WBSJJJ \QSJOU YJ ^
 ˣ
 WBSOY
 GPS WBSJJJ \QSJOU OJ ^

Slide 63

Slide 63 text

ϓϩάϥϜͷҙຯͱ͸ w ϓϩάϥϜͷҙຯ͸มΘ͍ͬͯͳ͍Α͏ʹࢥ͑Δ w มΘ͍ͬͯͳ͍΋ͷʢ㲈ҙຯʣ w ࣜͷ஋ʢʣ w ϓϩάϥϜ֎ʹݟ͑ΔมԽʢʮʯͱදࣔ͞ΕΔʣ w มΘͬͨ΋ͷʢ㱠ҙຯʣ w ܭࢉաఔ w ϝϞϦ্ͷ஋ͷมߋύλʔϯ QSJOU QSJOU ࠷దԽͷͨΊ࣍ͷΑ͏ͳఆ਺৞ΈࠐΈΛͨ͠ͱ͢Δ ˞ͨͩ͠ݴޠʹΑΓʮҙຯʯ͸ҟͳΔ

Slide 64

Slide 64 text

ϓϩάϥϜͷҙຯΛ ఆٛɾදݱ͢Δͭͷํ๏ w ૢ࡞తҙຯ࿦ʢ0QFSBUJPOBM4FNBOUJDTʣ w ͋ΔݴޠͷදݱΛɺΑΓܗࣜతͳݴޠʹม׵͢Δ͜ͱ ͰҙຯΛදݱ͢ΔɻίϯύΠϥʔͷఆٛʹ͍ۙ
 ˠDGνϡʔϦϯάϚγϯɺϥϜμܭࢉ w දࣔతҙຯ࿦ʢ%FOPUBUJPOBM4FNBOUJDTʣ w ू߹΍ؔ਺ͳͲ਺ֶతͳ֓೦Λ༻͍ͯҙຯΛදݱ͢Δɻ ΠϯλϓϦλʔͷఆٛʹ͍ۙɻ w ެཧతҙຯ࿦ʢ"YJPNBUJDT4FNBOUJDTʣ w ͳΜ͔࿦ཧࣜͰදݱ͢ΔΒ͍͠

Slide 65

Slide 65 text

͖ͭͮ͸ຊͰ ʰΞϯμʔελϯσΟϯάίϯ ϐϡςʔγϣϯʱ IUUQXXXBNB[PODPKQEQ 9

Slide 66

Slide 66 text

˞͔͜͜Βઌʹ͸ߨٛ͸ ͳ͍ͷͰ࣮૷͋ΔͷΈ

Slide 67

Slide 67 text

՝୊ w ූ߸෇͖Ϗοτ੔਺·Ͱѻ͑ΔΑ͏ʹͤΑ w จࣈྻϦςϥϧΛ࣮૷ͤΑ

Slide 68

Slide 68 text

՝୊ w XIJMFจΛ࣮૷ͤΑ w CSFBLจͱDPOUJOVFจΛ࣮૷ͤΑ

Slide 69

Slide 69 text

՝୊ w ϩʔΧϧม਺ͷࢀরͱ୅ೖΛ࣮૷ͤΑ w 3FTPMWF/PEFͷOWBSJBCMFʹ͸7BSJBCMFΦϒδΣΫτ͕ೖ͍ͬͯͯɺͦͷ 7BSJBCMFΦϒδΣΫτ͔Β͸OWBSJBCMFJOEFYͰϩʔΧϧม਺*%͕औΕΔ

Slide 70

Slide 70 text

՝୊ w ޙஔΠϯΫϦϝϯτʢJʣΛ࣮૷ͤΑ

Slide 71

Slide 71 text

՝୊ w ҎԼͷΦϒδΣΫτࢦ޲ػೳΛ࣮૷ͤΑ w OFXࣜ w ϓϩύςΟͷಡΈॻ͖ w PCKQSPQܗ͚ࣜͩͰΑ͍ɻPCK͸ෆཁʢจࣈྻϦςϥϧΛ࣮૷ ͍ͯ͠ͳ͍ͱҙຯͳ͍ͨΊʣ w ϝιουݺͼग़͠ w ϝιουఆٛ͸͢Ͱʹఆٛ͞Ε͍ͯΔؔ਺ΛϓϩύςΟʹηοτ͢Δ ͜ͱͰ୅ସ͢ΔʢԼهࢀরʣͷͰɺݺͼग़͚ͩ͠ͰΑ͍
 GVODUJPOPCK@N \SFUVSO^
 PCKNPCK@N

Slide 72

Slide 72 text

՝୊ w ഑ྻϦςϥϧΛ࣮૷ͤΑ

Slide 73

Slide 73 text

࠷ऴ՝୊ w ແ໊ؔ਺Λ࣮૷ͤΑ w ͜ͷ՝୊ʹݶΓ$PEF(FOFSBUPSҎ֎ͷίʔυมߋ͕ඞཁͳՄೳੑ͕͋Δ