質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

Q&A

解決済

2回答

317閲覧

アセンブリプログラムの質問

binary

総合スコア33

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

0グッド

0クリップ

投稿2018/10/17 05:08

linux(ubuntu 64bit)でアセンブリプログラミングをしています。
標準入力をfread関数で読みキーを入力するとそれを標準出力するプログラムをつくろうと思っているのですが、標準入力をfread関数で読み込もうとすると、セグメンテーションエラーが起こります。どうすればいいでしょうか?回答よろしくお願いします。
一応考えたのですが、標準入力はeofがないのでタイムアウトで終わったのかと考えました。ですが、freadは読み込むデータ量を指定しているのでeofがエラーの原因ではないような気がします。
原因がわからないので質問しました。
回答よろしくお願いします。
プログラムはこれです。gcc 64bitです。

gcc

1.file "main.s" 2 3.bss 4.comm buffer,64 5 6.data 7codes: .string "%s\n" 8 9.text 10.globl main 11main: 12pushq %rbp 13movq %rsp, %rbp 14subq $32, %rsp 15 16main1: 17movq $32, %rdx 18movq $buffer, %rsi 19movq $0, %rdi /*標準出力のファイル識別子*/ 20call fread 21movq $buffer, %rsi 22movq $codes, %rdi 23call printf 24movq stdout(%rip), %rax 25movq %rax, %rdi 26call fflush 27jmp main1 28~

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

fread関数で必要なのはファイルディスクリプタ(fd)とは違います。

fdopenでストリームを開く必要があります。


もしくはファイルディスクリプタから読み取れるreadを用いる手もあります。

投稿2018/10/17 05:31

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

binary

2018/10/18 00:07

回答ありがとうございました。 無事解決できました。
guest

0

ベストアンサー

呼び出しているパラメータから想像して、C標準関数の fread() じゃなくて、
システムコールの read にしなければならないのでは?

投稿2018/10/17 05:27

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

binary

2018/10/18 00:06

回答ありがとうございます。 無事解決できました。 ご想像の通りシステムコールを使いたかったのでfreadではなくreadでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問