こんにちは。現在アセンブリの勉強をしているのですが以下のコードが理解できません。
macOS, x86_64でのコードになります。
.global _main .section __TEXT,__text _main: // pushq $0 leaq _fmt(%rip), %rdi callq _puts // popq %rax retq .section __DATA,__data _fmt: .asciz "hello"
$ cc z.s && ./a.out
[1] 21355 segmentation fault ./a.out
関数呼び出し前にスタックに何らかの値を積むとエラーを回避できるのですが、
何故そのような操作が必要なのかどなたかご教授頂けないでしょうか。
なおリファレンスがあるとありがたいです。
同様のコード
.globl main .section .text main: leaq fmt(%rip), %rdi callq puts retq .section .data fmt: .asciz "hello"
が linux(docker)上で動く事は確認しております。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/16 12:24
2017/07/16 12:35
2017/07/16 12:50
2017/07/16 12:54
2017/07/16 13:00
2017/07/16 13:14
2017/07/16 14:09