2016-06-14 5 views
-1

私はAT & T構文でアセンブリ言語を学んでいます。後でそれを扱うために、ターミナルからいくつかの文字列を読みたいと思います。 私はsystemcall readを使いたいですが、後で文字列がどこに格納されているのかはわかりません。誰も私の弦を見つける方法を教えてもらえますか?sys_readの後に格納される文字列はどこですか?

+1

コードが表示されますか?質問の下にある[編集]をクリックし、コードを貼り付けて質問を保存します。 –

+2

は、通常、システムコールを行う前に、あなたは*のECX *または(プラットフォームに応じて)* RSI *文字列が書き込まれるバッファへのポインタに配置する必要があります。 –

+0

どのオペレーティングシステムをプログラミングしていますか? – fuz

答えて

1

これは、the 2nd arg you passed to read(2)が指すバッファに格納されています。マーガレット・ブルームのコメントとして

、x86-64のi386のLinuxはecxで第二int 0x80引数を渡しながら、Linuxは、rsiに第二syscall引数を渡します。詳細については、システムコール/ ABIの上タグwikiのセクションを参照してください。無効なポインタを渡した場合


readeax-EFAULTを返し、どこでも、何も格納しません。 (システムコールに不正なポインタを渡すことからsegfaultを取得しないでください)。

は、すべてのシステムがあなたのコードが行う呼び出しを見ることにstrace(strace ./a.out)の下で、あなたのプログラムを実行します。

関連する問題