gccでinline assemblyしたとき
インラインアセンブラ - falcon071011.log
http://falcon071011.com/2013/10/20/inline-assembler/
にて提起されたことについて。
エラーに出ているような行はインラインアセンブラ中に見当たらないし、書いたとこ以外でエラーしてると見える。
一応試してみたが、
__asm__ (".intel_syntax noprefix");
で全く同じエラーが出た。(movlっておいしいの?)
エラーメッセージから/tmp以下にランダムな名前でアセンブラファイルを作り、アセンブルしていることが読み取れる。
実際に読んでみると、
$ cat /tmp/cc2jgZsM.s .file "a.c" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 #APP # 2 "a.c" 1 .intel_syntax noprefix # 0 "" 2 #NO_APP movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 4.8.1 20130725 (prerelease)" .section .note.GNU-stack,"",@progbits
そんな気はしていたが、インラインアセンブラは型にはめているだけ。
で、オプションで.intel_syntaxとかつけちゃっているから、はまっている型の部分でエラーが出るよね、ということ。
ちなみに -masm=intelをつけると
.file "a.c" .intel_syntax noprefix .text .globl main .type main, @function main: .LFB0: .cfi_startproc push rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 mov rbp, rsp .cfi_def_cfa_register 6 #APP # 2 "a.c" 1 .intel_syntax noprefix # 0 "" 2 #NO_APP mov eax, 0 pop rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (GNU) 4.8.1 20130725 (prerelease)" .section .note.GNU-stack,"",@progbits
型にちゃんと.intel_syntaxがついているので、わざわざ書く必要はないのかなという感じ。
明示的に示す必要性があるのかないのかはしらないけど。
素直に-masm=intelをつけよう。
追記
とおもったけどよく考えたら、エラーが出ているのは.intel_syntaxの直後で、それ以前のAT&Tのとこではエラーが出ていない。
ということは、syntaxのディレクティブは途中で変更可能ということ。
すなわち、
__asm__ ( ".intel_syntax noprefix;" "mov eax, 0;" ".att_syntax;" )
で-masmなしでいけた。
Hash#invertの、値を上書きしないやつ
{a:1, b:1, c:2}.invert # => {1=>:b, 2=>:c}
:aさんが泣いちゃいます。
Hash[*{a:1, b:1, c:2}.group_by{|k,v| v}.map{|v,kv| [v,kv.map(&:first)]}.flatten(1)]
# => {1=>[:a, :b], 2=>[:c]}
よかったね!:aさん!
qtbindingsのemitが動かない話
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-linux]
gem 2.1.9
gem-1.9 1.8.23 にて。
http://stackoverflow.com/questions/15583114/qtruby-emit-does-not-work
これ。
ruby2.0では動かないらしいので、ruby1.9で動かしましょうという話。
しかし実際にruby-1.9で動かしてみたら、Segmentaition Fault起こした。ふぇぇ。
rubyが(というかqtbindingsのnativeが)せぐふぉったのを見たのは初めてですね。
qtbindingsの最新版だとダメかな、とか思ってqtbindings 4.6.3.4も試したけどおんなじ。せぐふぉ。
でもemitに関係なくせぐふぉってるので、これはこれでまた別のおかしい状況です。
ちなみにせぐふぉっているのはlibqtruby4shared.soのrb_type()とかいう関数らしい。
ふぇぇ。
バイナリファイルをcatしてしまってアルファベットが文字化けってとき
printf "\ec"
CSAW 2013 Qualification write up
どうも。
WebもExploitもReverseも適当にしか解けないです。
さて、Reconを三つ解きました。