ウホウホゴリラッホ

主に勉強したことをまとめていきます。twitter:@pytran3

アセンブリ勉強記録 7

勉強したこと

ポインタ

ポインタの指し先を書き換える場合はデータ長を指定しないといけない。

mov [test], 4 ; <- compile error
mov byte[test], 4 ; <- ok!!

文字列

コードを写経した。基本的にこういうロジックはC言語で学んだことと同じくやるらしい。

global _start

section .data

test_string: db "abcdef", 0

section .text

strlen:
    xor rax, rax

.loop:
    cmp byte [rdi+rax], 0

    je .end
    inc rax
    jmp .loop

.end:
    ret

_start:
    mov rdi, test_string
    call strlen
    mov rdi, rax
    mov rax, 60
    syscall

呼び出し先退避レジスタ

絶対忘れる。

システムコール

Linuxのmanコマンドを使うと定義が確認できる。C言語での説明が書かれているが、引数の順序が一致しているらしい。上手くアセンブリに読み替えながら解読していくものらしい。。。

https://montcs.bloomu.edu/Information/LowLevel/Assembly/assembly-tutorial.html