問題タブ [activation-record]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
253 参照

c++ - アクティベーション レコードが定義されるのは、バイナリの構築のどの段階ですか?

gcc など、前処理中またはコンパイル段階ですか? 他のコンパイラでは違いますか?

0 投票する
2 に答える
1964 参照

c - アクティベーションレコードの長さ

最初の3つの質問でそれぞれ6,4,3を取得しますが、最後の質問を理解する方法がわかりません。ただし、ソリューションマニュアルには、回答として7、5、4、18が示されています。

0 投票する
2 に答える
163 参照

c - C - アクティベーション レコード内の変数のアドレス

アクティベーション レコードの最初のローカル変数のメモリ アドレスを見つける最も簡単で簡単な方法は何ですか? (Cで..)

すでに宣言したものは関係ありません。char *s = 'Hello world!' のように単純にすることもできます。

ありがとう!

0 投票する
1 に答える
141 参照

c++ - main()は自動変数で作成されます。もしそうなら、その目的は何ですか?

関数呼び出しスタックセクションの教科書を読んでいて、これに出くわしました。

アクティベーションレコードは、メインにオペレーティングシステムに戻る方法(つまり、リターンアドレスR1に転送する方法)を指示し、メインの自動変数(つまり、10に初期化されるa)用のスペースを含みます。

これは私にとってニュースだったので、私の質問は次のとおりです。

  1. 自動変数は作成されますか?
  2. その目的は何ですか?
  3. その値は常に同じですか?

前もって感謝します

0 投票する
4 に答える
2840 参照

c - main には C の戻りアドレス、動的リンク、または戻り値がありますか?

私たちの本によると、各関数は C のランタイム スタックにアクティベーション レコードを持っています。これらのアクティベーション レコードにはそれぞれ、戻りアドレス、動的リンク、および戻り値があります。メインにはこれらもありますか?

0 投票する
4 に答える
265 参照

c - 別の関数で使用されるある関数のローカル変数 in の値 (c プログラミング)

上記のプログラムは、出力を何らかのジャンク値として提供していると確信しています(これは、コンパイルして実行したときに起こることです)。しかし、一部のコンパイラが出力を 4 自体として与える可能性があるという記事を読みました。与えられた説明は、それがアクティベーション スタックとアクティベーション フレームに関連しているというものでした。理解できない。bar() 関数の int a=4 の値が、後で使用するためにアクティベーション スタックのどこかに格納されているようなものですか??混乱しています!!

0 投票する
1 に答える
359 参照

c++ - シグナルとリターンアドレスによるプログラム実行の流れの変更

このコードの関数の戻りアドレスを変更して、プログラムの実行フローを変更しようとしています:

この目的のために、f関数を呼び出します。そのため、 でスタックしwhile(true)ます。次に、コマンドSIGCONTを使用してプログラムにシグナルを送信しますkill -SIGCONT <PID>。ここで、プログラムは実行を中断while(true)し、関数fを実行する必要がありsます。関数では、ランタイムスタックで関数の戻りアドレスを見つけるようsに定義しました。この値を で変更して、 に戻ったときにの実行をスキップして を実行するようにします。しかし、それは行き詰まり続けており、これを機能させる方法がわかりません。bs*(&b+3)*(&b+3) = *(&b+3) + 4fwhile(true)printf("f exit\n")while

注: 以前に __builtin_return_address(0) によって返された値と比較して、*(&b+3) がリターン アドレスであることを確認しました。

関数の本体でmainありf、変更されていない必要があります。

ありがとう。