- ベストアンサー
アセンブラのシステムコールの使い方について
- アセンブラのシステムコールに悩んでいます。MacBook Proとnasmを使用していますが、うまくいかないようです。
- test.asmファイルの中身を見ると、'open'システムコールでファイルをオープンし、'write'システムコールでファイルに書き込み、'close'システムコールでファイルをクローズしています。
- 一体どこが間違っているのでしょうか?助けをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> raxを調べると、0x0002が返ってくるようです。 -2 (0xff..fe) ということですか? 0,1,2 が stdin,out,err ですから正常なら >=3 が想定されるところです。 > ということは、「ファイルが存在しない」なのでしょうか? 2==ENOENT ならそうなりますが、O_CREAT が指定されていればエラーするにしても別のエラーコードになりそうです。 > もしかして、パラメータの数字が違うのかも知れません。 自分も初めにこれを疑いました。 別 OS は当然として同じ OS でもバージョン違いの情報は当てにできません。もう一度 /usr/include 配下のヘッダファイルを確認するか、C に書き起して cc -E などでマクロ展開の結果と突き合わせることをお勧めします。 ヘッダのパスとかコンパイラドライバはお使いのものに読み換えてください
その他の回答 (2)
- trapezium
- ベストアンサー率62% (276/442)
> O_TRUNCを調べましたところ、0x200を足すと良いらしいです。 > が、それでもうまく動きません。 エラーコードは確認してみましたか? > mov [rel fd], rax が負数で errno に対応してると思います。open(2) の説明にある ENOENT, EPERM とかです にしても 0x2000005 番台なんですね。5,4,6 の対応は FreeBSD とかと一緒ですが。
お礼
どうも、ありがとうございます。 raxを調べると、0x0002が返ってくるようです。 ということは、「ファイルが存在しない」なのでしょうか? もしかして、パラメータの数字が違うのかも知れません。
- trapezium
- ベストアンサー率62% (276/442)
> 何だかオープンがうまくいっていない様な感じです。 自分は試せないが、レジスタの用途自体は合ってるとしたら > mov rsi, 0x042 ; write mode これ O_WRONLY | O_CREAT | O_TRUNC ですか? # 1bit 足りないから trunc なしか...
お礼
どうもありがとうございます。 O_TRUNCを調べましたところ、0x200を足すと良いらしいです。 が、それでもうまく動きません。 教えていただいてありがとうございます。 どうも、どうもです。
お礼
ありがとうございました。 書き込みは研究の余地がありますが、なぜか'00'が書き込めれる。 読み込みは、テキストファイルが読み込めました。 パラメータの値が違ったのだと思います。 どうも、お世話かけました。 皆様に、良いアドバイスをいただき感謝いたしました。