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セグメント
  • ヒープセグメント
  • スタックセグメント
テキストセグメント

ここには、プログラム自身が格納される

データセグメントとbssセグメント

プログラム中で利用されるグローバル変数やスタティック変数や定数等が格納される

ヒープセグメント

プログラム中で動的に確保されるメモリ領域。Javaでもよく聞くのでなんとなくイメージできそう。Cの場合だと、malloc関数でメモリ確保したときこのヒープから割り当てられるのだと思う。

スタックセグメント

関数の中で利用される変数や渡される引数等が格納される。これはまさにスタック構造になっていて、関数が次々呼び出されるとスタックに値が積み上げられ、関数を抜けていくとスタックから取り除かれる。

独習アセンブリを買った。

独習アセンブラ
独習アセンブラ
posted with amazlet at 09.02.11
日向 俊二
翔泳社
売り上げランキング: 75732
おすすめ度の平均: 4.5
4 初心者向けの入門書
5 PCで気楽にアセンブラを学べる
こいつを地道にやっていくか。
そういえば、独習シリーズよくみるけど、自分で買ったの初めてだなー。向かし学校にあった独習Cを借りてた記憶はあるけど。そういやあれ返したっけな。。

あとは、これ。

Hacking:美しき策謀―脆弱性攻撃の理論と実際
ジョン エリクソン
オライリージャパン
売り上げランキング: 24270
おすすめ度の平均: 4.0
4 良い!
4 技術背景がわかります
4 真のハッカーとは
Cの初歩を知らないので、本に書いてることをそのまま実行してもなんにもおきやしないw最近の(?)gccバッファオーバーフローが起きないようにスタック保護機能があるらし。それはまた追々。