2014-03-20T19:05:22Z March 20, 2014

最近ツイッターで

“while(1){LOVE++}”と書き込まれてる指輪があって、

そのソースは最適化でLOVEが消えてただの無限ループになる云々という話があったので検証。


用意したソースはこちら。

int main()
{
int LOVE = 0;
while(1){LOVE++;}
}

それじゃアセンブラを見てみましょ。

まずは最適化抜き。


gcc -O0 -s hoge.c

.file “hoge.c”
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $0, -4(%ebp) ;LOVE=0
.L2:
addl $1, -4(%ebp) ;LOVE++
jmp .L2 ;JUMP TO L2
.size main, .-main
.ident “GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5”
.section .note.GNU-stack,”“,@progbits
LOVEは残ってますね。


gcc -O1 -s hoge.c

.file “hoge.c”
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
.L2:
jmp .L2 ;JUMP TO L2
.size main, .-main
.ident “GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5”
.section .note.GNU-stack,”“,@progbits


愛は最適化によって消滅しました。

while(1){LOVE++;}を最適化 - duost (via atm09td)

(via long-tweet)

2014-03-16T2:25:46Z March 16, 2014

larrycarlson:

LARRY CARLSON

Master of the Dog Star

Larrycarlson.com/scrolls

2014-03-12T19:21:57Z March 12, 2014
2014-03-10T3:56:40Z March 10, 2014
2014-02-20T1:22:20Z February 20, 2014
2014-02-04T4:38:22Z February 4, 2014
2014-01-25T12:51:24Z January 25, 2014
2014-01-16T3:22:50Z January 16, 2014
Microsoftが今それを何と呼んでいるのかよく分からないが、Googleは臆することなく今でもMetroと呼んでいる。
Chrome 32ではマルウェアブロックを強化, Windows 8の上ではChrome OSを体験できる | TechCrunch Japan
2014-01-11T14:21:12Z January 11, 2014
2014-01-11T13:22:38Z January 11, 2014