Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
インドのパンについての話 / a story about Indian bread
Search
Arata
July 26, 2020
40
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
インドのパンについての話 / a story about Indian bread
Arata
July 26, 2020
More Decks by Arata
See All by Arata
Black Hat USA 2026の面白かった発表を紹介
arata_nvm
1
27
Operating Systems: Three Easy Pieces, Chapter 49 / Sun's Network File System (NFS)
arata_nvm
0
27
デコンパイラ研究調査
arata_nvm
1
53
コンパイラ基盤を支える言語たち
arata_nvm
1
130
LLVMのDSL”TableGen”向け言語サーバーの開発
arata_nvm
0
48
5分でわかるPage-Fault Weird Machine
arata_nvm
2
460
eBPFを用いたAndroid向けデバッガ「eDBG」のx86_64 Linuxへの移植
arata_nvm
0
30
Pythonのcopy-and-patch JITの実装を読む
arata_nvm
0
210
eBPFを使った動的解析手法
arata_nvm
1
850
Featured
See All Featured
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
890
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Navigating Team Friction
lara
192
16k
Why Our Code Smells
bkeepers
PRO
340
58k
Amusing Abliteration
ianozsvald
1
350
Testing 201, or: Great Expectations
jmmastey
46
8.3k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Transcript
インドのパンについての話 2020/07/26 SecHack365 輪講 @Arata
インドのパンと言えば?
インドのパンと言えば? = ナン
NaNの読みは? ※ NaN: Not a Number
NaNの読みは? = ナン ※ NaN: Not a Number
つまり...
つまり...
つまり... ∴インドのパンはナン(=NaN)である。
ありがとうございました
なんで?
なんで? - JavaScript の仕様で決められているから
他の言語では
他の言語では - Go言語 packge main import “math” func main() {
math.IsNaN(+”インドのパン”) }
他の言語では - Go言語 packge main import “math” func main() {
math.IsNaN(+”インドのパン”) } ./hoge.go:4:14: invalid operation: + untyped string
1. 式を調べる 2. ドキュメントを調べる 3. ソースコードを調べる もっと詳しく
式を調べる
式を調べる - 式の評価される順番を調べる
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる 1. [文字列] 2.
+[文字列] 3. Number.isNan
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる 1. [文字列] 2.
+[文字列] <- ??? 3. Number.isNan
ドキュメントを調べる
ドキュメントを調べる - ‘+’には2つの意味がある
ドキュメントを調べる - ‘+’には2つの意味がある - 単項演算子: 1つの式に対しての演算 - e.g. +10
ドキュメントを調べる - ‘+’には2つの意味がある - 単項演算子: 1つの式に対しての演算 - e.g. +10 -
二項演算子: 2つの式に対しての演算 - e.g. 10 + 5
ドキュメントを調べる - ‘+’には2つの意味がある - 単項演算子: 1つの式に対しての演算 - e.g. +10 -
二項演算子: 2つの式に対しての演算 - e.g. 10 + 5 - +[文字列]は単項演算子
ドキュメントを調べる - Unary plus (+) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_plus
ドキュメントを調べる - Unary plus (+) - If it cannot parse
a particular value, it will evaluate to NaN. - 意訳: 文字列が数字として解釈できなかったらNaNを返す https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_plus
ソースコードを調べる
ソースコードを調べる - 環境: Node.js v14.3.0
ソースコードを調べる - 環境: Node.js v14.3.0 - 内部でV8を使っている
ソースコードを調べる - 環境: Node.js v14.3.0 - 内部でV8を使っている - Google製のJavaScriptエンジン -
ECMA-262という仕様に従って実装されている - Chromeの内部で使われている
ソースコードを調べる - 環境: Node.js v14.3.0 - 内部でV8を使っている - Google製のJavaScriptエンジン -
ECMA-262という仕様に従って実装されている - Chromeの内部で使われている - GitHub: https://github.com/v8/v8
ソースコードを調べる - 調べ方
ソースコードを調べる - 調べ方 - GitHubの検索機能を使う - リポジトリをクローンして検索ツールを使う
ソースコードを調べる - 調べ方 - GitHubの検索機能を使う - リポジトリをクローンして検索ツールを使う
ソースコードを調べる - “unary plus”でコミットを検索する
ソースコードを調べる - “unary plus”でコミットを検索する - “Improve handling of unary plus.”
- +[hoge] を [hoge]*1 に置換する
ソースコードを調べる - “unary plus”でコミットを検索する - “Improve handling of unary plus.”
- +[hoge] を [hoge]*1 に置換する - [hoge]が文字列の場合、String::ToNumber([hoge])*1に 置換する
ソースコードを調べる - “String::ToNumber”でファイルを検索する
ソースコードを調べる - “String::ToNumber”でファイルを検索する - “src/objects/string.cc” 370~427行目
ソースコードを調べる - “String::ToNumber”でファイルを検索する - “src/objects/string.cc” 370~427行目 - 符号、指数表記、進数を判断して数値に変換する - 変換できなければNaNを返す
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1)
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1) 2. Number.isNaN(NaN)
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1) 2. Number.isNaN(NaN) 3. true
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1) 2. Number.isNaN(NaN) 3. true -
インドのパンがナンであることは関係ない
ナンはおいしい🙄