5

Microsoft のドキュメントを読んだことがありますが、スキームが非常にぎこちないので、正しく理解していることを確認するために再確認しようと思いました...

私の理解では、パラメーターが渡される一般的な方法は次のとおりです。

--- bottom of stack ---
(return address)
[shadow space for arg 1]
[shadow space for arg 2]
[shadow space for arg 3]
[shadow space for arg 4]
arg N
arg N - 1
arg N - 2
...
arg 6
arg 5
---- top of stack -----

実装するときはとてもぎこちないva_argようです...これは実際に正しいですか?

4

1 に答える 1

7

正しい図は

--- Bottom of stack ---    RSP + size     (higher addresses)
arg N
arg N - 1
arg N - 2
...
arg 6
arg 5
[shadow space for arg 4]
[shadow space for arg 3]
[shadow space for arg 2]
[shadow space for arg 1]
(return address)
---- Top of stack -----    RSP            (lower addresses)
[grows downward]

戻りアドレスはスタックの一番上 (最後にプッシュされたアドレス) にあり、その後に最初の 4 つのパラメーターのシャドウ スペースが続き、その後にパラメーター 5 以降が続きます。

パラメータは右から左にプッシュされます: 最後のパラメータ (N) が最初にプッシュされるため、スタックの一番下に最も近くなります。

于 2012-08-23T05:39:33.690 に答える