プロが教える店舗&オフィスのセキュリティ対策術

以下のURLの最後で、eaxの「0」を戻り値として使うことができる。とは、戻り値に使わなくてもいいし、使っても良いという事でしょうか? また、なぜ、単に「0」が戻り値として戻ってくるというだけという事でしょうか?は違うのでしょうか?教えていただけると幸いです。すみません。
https://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al
よろしくお願いします。
で、なぜ、eaxレジスタの値を使うのでしょうか?ebxなどではなぜダメなのでしょうか?教えていただけると幸いです。すみません。

A 回答 (2件)

RAX を使うのは x64 CPU での一般的な「呼び出し規約」です。


すべてにおいて規約を守る必要はありませんが、
対外的に提供する部分については規約通りにすべきです。

参考)
https://ja.wikipedia.org/wiki/%E5%91%BC%E5%87%BA …
https://docs.microsoft.com/ja-jp/cpp/build/x64-c …
    • good
    • 0

>とは、戻り値に使わなくてもいいし、使っても良いという事でしょうか?


どちらでも構いません。あなたが作るメインプログラム次第です。

引用URLの内容に限らず、
何から何まであなたプログラマが全部作るのは負担が多いし
まずバグが出て対策に時間も手間もかかります。

なので
「ナントカコール」という、既にある既存のライブラリ等を使うのが
そこら辺の手間を省く意味で有効です。

それを使う約束というか方法として
決め打ちのレジスタに値を設定してコールする。
結果は決め打ちのレジスタに格納されているのでそれを使う。
ってのが一般的です。

何かをしてもらうつもりでコールしたのだから、
結果どうなったのか、eaxレジスタにその結果が残されてるんだから
普通はそれを確認しますよね。
失敗してたら他の手を使わなけりゃ失敗したままなので。

>なぜ、eaxレジスタの値を使うのでしょうか?
>ebxなどではなぜダメなのでしょうか?
その機能をコールする時の約束がeaxを使うようになってるから、です。

呼ばれるモジュールがそう作られてるんだから、合うように使うのが普通です。
ebx を見てもいいですけど、どういう値になってるのかわからないのに
そんなことしても意味ないので、するだけ無駄ですけどね
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!