Ubuntuでアセンブリを学ぶ
NASMのインストール
$ sudo apt-get install nasm
こんだけ。
http://www.mztn.org/lxasm/asm01.html
↑ここにあるはろーわーるどを書いてみる。
section .text global _start msg db 'hello, world', 0x0A msglen equ $ - msg _start: mov ecx, msg mov edx, msglen mov eax, 4 mov ebx, 1 int 0x80 mov eax, 1 mov ebx, 0 int 0x80
コンパイル、実行方法
$ nasm -f elf hello.asm $ ld -s -o hello hello.o $ ./hello hello, world
おお。生まれて初めてのあせんぶり。コピペですが。まぁ、初めの一歩。
アセンブリを使う上で重要そうなこと。
メモリ領域(用途によって以下のものに分類される)
- テキストセグメント
- データセグメント
- bssセグメント
- ヒープセグメント
- スタックセグメント
テキストセグメント
ここには、プログラム自身が格納される
ヒープセグメント
プログラム中で動的に確保されるメモリ領域。Javaでもよく聞くのでなんとなくイメージできそう。Cの場合だと、malloc関数でメモリ確保したときこのヒープから割り当てられるのだと思う。
スタックセグメント
関数の中で利用される変数や渡される引数等が格納される。これはまさにスタック構造になっていて、関数が次々呼び出されるとスタックに値が積み上げられ、関数を抜けていくとスタックから取り除かれる。
独習アセンブリを買った。
そういえば、独習シリーズよくみるけど、自分で買ったの初めてだなー。向かし学校にあった独習Cを借りてた記憶はあるけど。そういやあれ返したっけな。。
あとは、これ。
Hacking:美しき策謀―脆弱性攻撃の理論と実際
posted with amazlet at 09.02.11