実現したいこと
CentOSにて、「Hello World」のアセンブリをIntel方式で作成し、gccでコンパイルし、実行しましたが、何も出力しません。
AT&T方式では作成し、正常に実行できたのですが、コンパイルもエラーメッセージがまったく出ず何が間違っているのか分かりません。ご教授いただけると幸いです。エラーメッセージがあれば、まだ道筋がわかるんですが・・・
発生している問題・分からないこと
OSバージョン
(VPSサーバにCentOSをインストールしてます)
bash
1$ cat /etc/os-release 2NAME="CentOS Linux" 3VERSION="7 (Core)" 4ID="centos" 5ID_LIKE="rhel fedora" 6VERSION_ID="7" 7PRETTY_NAME="CentOS Linux 7 (Core)" 8ANSI_COLOR="0;31" 9CPE_NAME="cpe:/o:centos:centos:7" 10HOME_URL="https://www.centos.org/" 11BUG_REPORT_URL="https://bugs.centos.org/" 12 13CENTOS_MANTISBT_PROJECT="CentOS-7" 14CENTOS_MANTISBT_PROJECT_VERSION="7" 15REDHAT_SUPPORT_PRODUCT="centos" 16REDHAT_SUPPORT_PRODUCT_VERSION="7"
Intel方式で書いたアセンブリ
hello.s
1.intel_syntax noprefix 2 3.text 4.globl main 5 6 main: 7 mov rax, 1 8 mov rdi, 1 9 mov rsi, msg 10 mov rdx, 12 11 syscall 12 13 mov rax, 60 14 mov rdi, 1 15 syscall 16 17.data 18 msg: 19 .string "Hello World\n"
コンパイル時にエラーメッセージは出ず、実行しても何も表示されません。
bash
1$ gcc -Wall -o hello hello.s 2$ ./hello 3$
システムコール番号に間違いないか確認してますが、間違ってない様です。
bash
1$ ausyscall --dump | grep write 21 write 318 pwrite 420 writev 5296 pwritev 6311 process_vm_writev 7328 pwritev2 8$ ausyscall --dump | grep exit 960 exit 10231 exit_group
AT&T方式で以下アセンブリを作成し、実行しましたが正常に実行できている様です。
hello.s
1.text 2.globl main 3 4main: 5 mov $1, %rax 6 mov $1, %rdi 7 mov $msg, %rsi 8 mov $12, %rdx 9 syscall 10 11 mov $60, %rax 12 mov $1, %rdi 13 syscall 14 15 .data 16 msg: 17 .string "Hello World\n"
bash
1$ gcc -Wall -o hello hello.s 2$ ./hello 3$ Hello World
該当のソースコード
特になし
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Intel方式の記述でもgccでコンパイルできると聞いたので、いろいろ検索しました。
NASMではCentOSでもMacでも、実行でき、gccでもMacではなんとか実行できました。
エラーメッセージも出ず、AT&Tでもできたのになぜできないのかわかりません。
補足
特になし
回答1件
あなたの回答
tips
プレビュー