MacOSのシステムコール呼び出しでの"Bus Error: 10"

MacOSで64bitのシステムコールを呼ぼうとした時に気になったことがあったのでメモ。

 

MacOSシステムコール

https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master

これを見るとexitシステムコールは1なのでアセンブリで書くとこんな感じになる。

これをコンパイルしてリンクすると 

$ nasm -f macho64 -o nasm.o nasm.asm

$ ld nasm.o -e _start -o nasm

$ ./nasm

Bus error: 10 

なんでだろうと思って調べてみたら以下の記事が見つかった。

TheXploit | Mac OS X 64 bit Assembly System Calls

Mac OS X 64bitでシステムコール - 七誌の開発日記

書いてある通りなのだけどMacOSではシステムコール呼び出すにはクラス番号を足す必要があるらしい。

正しくは以下。

 

ちょっとだけ解説

先ほどのMac OS X 64 bit Assembly System Callsに書いてあるのを適当に訳してみる。

https://opensource.apple.com/source/xnu/xnu-792.13.8/osfmk/mach/i386/syscall_sw.h

BSDではシステムコールはクラスごとに分かれていて、上位ビットはクラスを表すらしい。書き込みと終了はSYSCALL_CLASS_UNIXに分類され、0x2000000 + unix_syscallとなる。なので0x2000001が終了のためのシステムコール

eslintを導入しました

es2015とreactの組み合わせでlintしたくて.eslint.jsを書きました。

gist.github.com

f:id:mute1997:20170511004137p:plain

おしまい。

シェルを起動した

gist.github.com

なにが起こるかというとシェルが起動する。

技術書典2に行ってきました

f:id:mute1997:20170409170908j:plain

技術書典2に行ってきました。おわり。

synfloodとmiraiの話

最近ボットネットのmiraiのソースを読んだ。

マルウェアのソース読める機会なんて少ないしかなり面白かった。

個人的面白ポイントとしては脆弱なホストを探すときに、国防総省ヒューレットパッカード、USPostなどのIPを避けてスキャンしていてなるほどなぁといいながら読んでた。

C&Cサーバーのアドレスを解析避けしてるところなんかも面白かった。

なんとなく触発されてsynfloodのコードを書いた。

scapy強い。

github.com

blacknurse書いた

ICMPパケット送りまくってルーターのCPU食いつぶすDOS

自宅のルーターに向けて送ったらどこにも接続できなくなって笑った。

楽しい。

github.com

どっかーん

なんだかフロントエンド触ってみたい気持ちになったのでreactを初めた。

まずは環境構築ということでdockerにローカルのファイルをマウントしてdockerの方で更新を見張っていい感じにウェイという環境を作ってみた。

webpackやらbabelやら知らないツールがたくさんでフロントエンドも面白そう。

 

それと全く関係ないんだけどdigispark輸入したいなと思ってるのでサークルの人とかは共同購入したりしませんか。

digistump.com