Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Nomura Yusuke
KEY, PPTX
2,489 views
core dumpでcode golf
ネタ ※ 2012/07/06 最後のほう訂正・追記しました
Technology
◦
Read more
8
Save
Share
Embed
Embed presentation
Download
Download as KEY, PPTX
1
/ 25
2
/ 25
3
/ 25
4
/ 25
5
/ 25
6
/ 25
7
/ 25
8
/ 25
9
/ 25
10
/ 25
11
/ 25
12
/ 25
13
/ 25
14
/ 25
15
/ 25
16
/ 25
17
/ 25
18
/ 25
19
/ 25
20
/ 25
21
/ 25
22
/ 25
23
/ 25
24
/ 25
25
/ 25
More Related Content
PDF
Boost tour 1.60.0 merge
by
Akira Takahashi
PPT
Altanative macro
by
Motohiro KOSAKI
PDF
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
by
Google Developer Relations Team
PDF
SEH on mingw32
by
kikairoya
PDF
Effective Modern C++ 読書会 Item 35
by
Keisuke Fukuda
PDF
Effective Modern C++ 勉強会#3 Item16
by
Mitsuru Kariya
PDF
Fpgax 20130830
by
Takefumi MIYOSHI
PDF
エキ Py 読書会02 2章前半
by
Tetsuya Morimoto
Boost tour 1.60.0 merge
by
Akira Takahashi
Altanative macro
by
Motohiro KOSAKI
Google Developer Day 2010 Japan: プログラミング言語 Go (鵜飼 文敏)
by
Google Developer Relations Team
SEH on mingw32
by
kikairoya
Effective Modern C++ 読書会 Item 35
by
Keisuke Fukuda
Effective Modern C++ 勉強会#3 Item16
by
Mitsuru Kariya
Fpgax 20130830
by
Takefumi MIYOSHI
エキ Py 読書会02 2章前半
by
Tetsuya Morimoto
What's hot
PDF
x86とコンテキストスイッチ
by
Masami Ichikawa
PDF
SSE4.2の文字列処理命令の紹介
by
MITSUNARI Shigeo
PDF
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
by
Hiro H.
PDF
プロセスとコンテキストスイッチ
by
Kazuki Onishi
PDF
Visual C++コード分析を支えるSAL
by
egtra
PDF
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
PDF
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
by
Hirotaka Kawata
PDF
Hello Dark-Side C# (Part. 1)
by
Yuto Takei
PDF
デバドラを書いてみよう!
by
Masami Ichikawa
PDF
Effective Modern C++ 勉強会#3 Item 15
by
Mitsuru Kariya
PDF
高速な倍精度指数関数expの実装
by
MITSUNARI Shigeo
PDF
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
by
MITSUNARI Shigeo
PDF
constexpr idioms
by
fimbul
PDF
謎の言語Forthが謎なので実装した
by
t-sin
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
PPTX
高度に最適化された移植可能なメモリマネージャ
by
DADA246
PDF
Rpn and forth 超入門
by
Yoshitaka Seo
PDF
エキ Py 読書会02 2010/9/7
by
Tetsuya Morimoto
PDF
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
PDF
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
by
Hiro H.
x86とコンテキストスイッチ
by
Masami Ichikawa
SSE4.2の文字列処理命令の紹介
by
MITSUNARI Shigeo
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
by
Hiro H.
プロセスとコンテキストスイッチ
by
Kazuki Onishi
Visual C++コード分析を支えるSAL
by
egtra
中3女子が狂える本当に気持ちのいい constexpr
by
Genya Murakami
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
by
Hirotaka Kawata
Hello Dark-Side C# (Part. 1)
by
Yuto Takei
デバドラを書いてみよう!
by
Masami Ichikawa
Effective Modern C++ 勉強会#3 Item 15
by
Mitsuru Kariya
高速な倍精度指数関数expの実装
by
MITSUNARI Shigeo
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
by
MITSUNARI Shigeo
constexpr idioms
by
fimbul
謎の言語Forthが謎なので実装した
by
t-sin
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
高度に最適化された移植可能なメモリマネージャ
by
DADA246
Rpn and forth 超入門
by
Yoshitaka Seo
エキ Py 読書会02 2010/9/7
by
Tetsuya Morimoto
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
by
Hiro H.
Similar to core dumpでcode golf
PDF
PFI Seminar 2010/02/18
by
Preferred Networks
PDF
第2回勉強会スライド
by
koturn 0;
PDF
2011.09.18 v7から始めるunix まとめ
by
Makiko Konoshima
PDF
【学習メモ#3rd】12ステップで作る組込みOS自作入門
by
sandai
PDF
llvm入門
by
MITSUNARI Shigeo
PDF
V6 unix in okinawa
by
magoroku Yamamoto
PPTX
競技プログラミングのためのC++入門
by
natrium11321
PDF
d-kami x86-1
by
Daisuke Kamikawa
PDF
やさしく知りたいC言語
by
uru nru
PDF
フラグを愛でる
by
MITSUNARI Shigeo
PPTX
Misrac20150523
by
Kiyoshi Ogawa
PDF
2011.06.11 v7から始めるunix まとめ
by
Makiko Konoshima
PPTX
as-5. サブルーチン呼び出しのメカニズム
by
kunihikokaneko1
PDF
#5:プログラミングの基本
by
長岡技術科学大学 自然言語処理研究室
PDF
研究生のためのC++ no.2
by
Tomohiro Namba
PDF
From IA-32 to avx-512
by
MITSUNARI Shigeo
PPT
プログラミングで言いたい聞きたいこと集
by
tecopark
PPT
プログラミングで言いたいこと聞きたいこと集
by
tecopark
PPTX
ネイティブコードを語る
by
Kenji Imasaki
PDF
Tora pointer3
by
MARISHI
PFI Seminar 2010/02/18
by
Preferred Networks
第2回勉強会スライド
by
koturn 0;
2011.09.18 v7から始めるunix まとめ
by
Makiko Konoshima
【学習メモ#3rd】12ステップで作る組込みOS自作入門
by
sandai
llvm入門
by
MITSUNARI Shigeo
V6 unix in okinawa
by
magoroku Yamamoto
競技プログラミングのためのC++入門
by
natrium11321
d-kami x86-1
by
Daisuke Kamikawa
やさしく知りたいC言語
by
uru nru
フラグを愛でる
by
MITSUNARI Shigeo
Misrac20150523
by
Kiyoshi Ogawa
2011.06.11 v7から始めるunix まとめ
by
Makiko Konoshima
as-5. サブルーチン呼び出しのメカニズム
by
kunihikokaneko1
#5:プログラミングの基本
by
長岡技術科学大学 自然言語処理研究室
研究生のためのC++ no.2
by
Tomohiro Namba
From IA-32 to avx-512
by
MITSUNARI Shigeo
プログラミングで言いたい聞きたいこと集
by
tecopark
プログラミングで言いたいこと聞きたいこと集
by
tecopark
ネイティブコードを語る
by
Kenji Imasaki
Tora pointer3
by
MARISHI
Recently uploaded
PPTX
ddevについて .
by
iPride Co., Ltd.
PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
PDF
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
PDF
Drupal Recipes 解説 .
by
iPride Co., Ltd.
ddevについて .
by
iPride Co., Ltd.
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
Drupal Recipes 解説 .
by
iPride Co., Ltd.
core dumpでcode golf
1.
core dumpでcode golf いかに短いコードでcore
dumpさせるか 野村裕佑(@yunomu11)
2.
事の起こり 私が管理してるサーバでcoreファイルがディスク容量 を食いつぶすトラブルがあった 解決策を打った 試しにcore dumpするプログラム(C言語)を書いた 「なんでそれでcore dumpするの?」って聞かれて、深 く考えると面白いかもと思った
3.
core dumpとは UNIX/Linux系OSの機能 プロセス実行時のエラーにより、プロセスの動作継続 が不可能だとOSが判断した時、プロセス強制終了と 同時にメモリ内容などをディスクに書き込む 書き込み先のファイルを通称coreと呼ぶ
coreはプロセスの死体。死ぬ直前の情報(メモリ内 容など)が詰まってる→バグ解析に役立つ アクセス保護違反・存在しない命令・その他不整合 segmentation fault/bus error
4.
要するにcore dumpとは 不正な操作でプロセスが死ぬ時に起きる 不正な操作とは:アクセス保護違反、不正な命 令、ハードウェア故障、など……… 普通はプログラムのバグ
5.
core dumpさせるためには 実行時エラーが起きるプログラムを書いて
プロセスを殺せばいい やってみた ついでにgolfに挑戦してみた (C言語)
6.
確実に殺す
32bit版UNIX/Linux系限定 int main() { Warningも出ない完璧なcode int *a; a = (int *) 0xc0000000; メモリの0xc0000000番地に *a = 0; 0を書き込む return 0; } size: 69bytes
7.
なんで死ぬの 0
32bit版UNIX/Linux系OS限定 ユーザ プロセスは4GBの仮想メモリを持つ 領域 3GB以降の領域はOSが予約 3G OSしかアクセス出来ない OS領域 → アクセス保護違反 4G
8.
ほぼ確実に殺す int main() {
64bit版やWindowsでもいけるが、 int *a; 落ちない場合もある a = (int *) 0; *a = 0; メモリの0番地に0を書き込む return 0; } size: 60bytes
9.
なんで死ぬの/死なないの
仮想 物理 メモリ メモリ 物理メモリを細かく分割し、必要な時に必要な部分だけに割り当 てる(仮想記憶) 物理メモリが割り当てられていないアドレスにアクセスするとpage fault例外(page not presented)が起きる 多くの場合、0番地には物理メモリを割り当てない Cでは存在しないアドレスを0と表現(NULL pointer) NULLにアクセスした時に確実にエラーにするため(一節では)
10.
短くする(golf) int main() {
int *a; a = (int *) 0; *a = 0; 変数宣言と同時に初期化する。 return 0; } 基本中の基本 int main() { size: 56bytes int *a = (int *) 0; (実際にはこれを書いた) *a = 0; return 0; }
11.
もっと短くする int main() {
int *a = (int *) 0; Warningを恐れない *a = 0; return 0; mainの戻り値省略(intになる) } キャスト省略(どうせ値は0だし) main() return省略(勝手にその時のeaxレ { ジスタの値が返るようになる) int *a = 0; *a = 0; size: 33bytes }
12.
もっともっと短くする main()
アドレスを初期化しない { int *a = 0; 物理メモリの状況により適当な *a = 0; 値が入る } →適当なアドレスに書き込むこ とになる main() { 最近のOSでは0の事が多い int *a; (セキュリティ的観点で0初期化さ *a = 0; れる) } size: 29bytes
13.
発想を変える main()
変数要らない疑惑 { int *a = 0; アドレス指定で値を直接書き込む *a = 0; } 演算子順位に注意 キャストはポインタより強い main() { 良い子は *(int *) 0 = 0; *((int *) 0) = 0; } と書きましょう size: 28bytes
14.
もっと発想を変える
ゼロ除算例外の方が短くね? ゼロ除算はCPUが検出する例外 main() 最適化でコードが消える事もある { int i = 0 / 0; “int i=”を消してもコンパイルでき } るが”0/0”は実行されない size: 27bytes(そんなに短くならな かった) でも空白多いから可能性アリ?
15.
余白を消す main(){int*a;*a=0;}
可読性なんて二の次 スペース、タブを可能な限り main(){*(int*)0=0;} 消す 改行も1バイト(削除対象) main(){int i=0/0;} size: 20bytes, 20bytes, 19bytes この辺が限界
16.
さらに短くするために もっと根本から発想を変える
17.
そもそもmain()とは C言語プログラムのエントリポイント(入り口) crt0.oにより呼び出される(crt1.o, crt3.oなど色々) /usr/lib/bcc/{arch}/{ver}/crt?.o
あたりにある(たぶん) gccのコンパイル時に自動的にリンクされる部品 OSから呼ばれるエントリポイント(start)がこの中に 実行前の準備をする(シグナルハンドラ、引数、環 境変数など)
18.
crt0.oからのmain()呼び出し /* argc, argvなどの準備
引数argc, argvを設定して */ exit(main(argc, argv)); main()を呼び出す コンパイル push %eax # argv main()の戻り値をexitに渡す push %ebx # argc call main アセンブリにするとこんな add $8, %esp push %eax # retval of main 感じ(as, i386) call exit add $4, %esp
19.
crt0.oからのmain()呼び出しの実態 mainという名前のグローバルシンボルを呼び出してい るだけ
シンボル:変数名、関数名、ラベル、のようなもの C言語ではstaticなどをつけない関数・変数はグローバ ルシンボル 関数と変数は本質的に同じもの ラベルの位置に命令があるかデータがあるか 命令もデータもバイト列である事に変わりはない
20.
mainを変数にする
mainラベルを呼び出した先に2が ある int main=2; i386系CPUに2と対応する命令が コンパイル 存在しない(たぶん) main: .byte 2 無効オペコード例外 CPUのverにより通る可能性 ↓動いてしまう例↓ 定数はテキスト部に配置される int main = 0xc3; 実行権限エラーにはならない main: ret 正確にはrodata部 何もしない関数呼び出し size: 12bytes
21.
もっとがんばる main=2;
グローバルシンボルの型は 省略可能 main: .byte 2 関数と同じ(たぶんintになる) ↑さっきと同じ↑ そもそもアセンブリ同じだし (もうプログラムに見えない) size: 8bytes
22.
高級なエディタなんて使ってるから “main=2;” 7文字なのに8bytesとはこれいかに ファイルの最後に改行が入ってました 最近勝手に補完するエディタが多いので注意
vimとかemacsとかは余計なお世話をする viを使うか、以下のようにやると確実 # echo -n “main=2;” > coredump.c size: 7bytes (私の限界) ※訂正:viも改行補完する方でした。emacsは設定 で変更できるそうです。
23.
結論 main=2;
24.
使った武器 C言語・コンパイル後の機械語コード UNIX/Linux系OSのメモリ管理 プログラム実行の仕組み i386系CPUの命令と例外 (割と私の全力)
25.
追記(2012/07/06)
もっと短くなった これでいいんじゃね? mainを初期化しない by @mayahjp BSS部に変数領域が確保される mainがBSS部を指す main; データ領域をコードとして実 行しようとして保護違反 古いOSだと実行できるかも size: 5bytes
Editor's Notes
#2
\n
#3
\n
#4
\n
#5
\n
#6
\n
#7
\n
#8
\n
#9
\n
#10
\n
#11
\n
#12
\n
#13
\n
#14
\n
#15
\n
#16
\n
#17
\n
#18
\n
#19
\n
#20
\n
#21
\n
#22
\n
#23
\n
#24
\n
#25
\n
#26
\n
Download