2018年9月17日月曜日

アセンブラ走り書き

intel記法の方が好きです。

- xor ax,axの理由
排他的論理和で同じものなら0になるわけですが、何故それならmov al,0とかにしないのかなと思っていたのですが、どうやら実行速度や資源が理由のようです。0を格納しておかなくて良いみたいな。後はmov al, 0x00はB000になるのでNullが発生したりして場合によっては都合が悪い的な。

- int 0x80
systemcallと何が違うのかなと思っていたのですが、これは32bit64bitの関係のようです。各レジスタに値を詰め込んでからint 0x80wするとシステムコールが呼び出せます。OS への唯一のアクセス方法であるとか。
 
http://softwaretechnique.jp/Linux/SystemCall/sc_01.html  によると、
axがシステムコール番号で、bxcxdxsidiが引数に当たるとのこと。
例えばmov al,0x66であれば、0x66は102なので
#define __NR_socketcall         102
となって、ソケット周りの機能が呼び出されます。
 
ただし、102でソケット関連を指定したところで、具体的な振舞いまでは指定できていません。そういうところを指定するのがbxになるのかな。
mov bl,0x1がsys_socket
mov bl,0x2がsys_bind
そして、cxには引数を積んだスタックのポインタが入るという流れのようです。



0 件のコメント:

コメントを投稿