問題タブ [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.
c++ - アクティベーション レコードが定義されるのは、バイナリの構築のどの段階ですか?
gcc など、前処理中またはコンパイル段階ですか? 他のコンパイラでは違いますか?
c - アクティベーションレコードの長さ
最初の3つの質問でそれぞれ6,4,3を取得しますが、最後の質問を理解する方法がわかりません。ただし、ソリューションマニュアルには、回答として7、5、4、18が示されています。
c - C - アクティベーション レコード内の変数のアドレス
アクティベーション レコードの最初のローカル変数のメモリ アドレスを見つける最も簡単で簡単な方法は何ですか? (Cで..)
すでに宣言したものは関係ありません。char *s = 'Hello world!' のように単純にすることもできます。
ありがとう!
c++ - main()は自動変数で作成されます。もしそうなら、その目的は何ですか?
関数呼び出しスタックセクションの教科書を読んでいて、これに出くわしました。
アクティベーションレコードは、メインにオペレーティングシステムに戻る方法(つまり、リターンアドレスR1に転送する方法)を指示し、メインの自動変数(つまり、10に初期化されるa)用のスペースを含みます。
これは私にとってニュースだったので、私の質問は次のとおりです。
- 自動変数は作成されますか?
- その目的は何ですか?
- その値は常に同じですか?
前もって感謝します
c - main には C の戻りアドレス、動的リンク、または戻り値がありますか?
私たちの本によると、各関数は C のランタイム スタックにアクティベーション レコードを持っています。これらのアクティベーション レコードにはそれぞれ、戻りアドレス、動的リンク、および戻り値があります。メインにはこれらもありますか?
c - 別の関数で使用されるある関数のローカル変数 in の値 (c プログラミング)
上記のプログラムは、出力を何らかのジャンク値として提供していると確信しています(これは、コンパイルして実行したときに起こることです)。しかし、一部のコンパイラが出力を 4 自体として与える可能性があるという記事を読みました。与えられた説明は、それがアクティベーション スタックとアクティベーション フレームに関連しているというものでした。理解できない。bar() 関数の int a=4 の値が、後で使用するためにアクティベーション スタックのどこかに格納されているようなものですか??混乱しています!!
c++ - シグナルとリターンアドレスによるプログラム実行の流れの変更
このコードの関数の戻りアドレスを変更して、プログラムの実行フローを変更しようとしています:
この目的のために、f
関数を呼び出します。そのため、 でスタックしwhile(true)
ます。次に、コマンドSIGCONT
を使用してプログラムにシグナルを送信しますkill -SIGCONT <PID>
。ここで、プログラムは実行を中断while(true)
し、関数f
を実行する必要がありs
ます。関数では、ランタイムスタックで関数の戻りアドレスを見つけるようs
に定義しました。この値を で変更して、 に戻ったときにの実行をスキップして を実行するようにします。しかし、それは行き詰まり続けており、これを機能させる方法がわかりません。b
s
*(&b+3)
*(&b+3) = *(&b+3) + 4
f
while(true)
printf("f exit\n")
while
注: 以前に __builtin_return_address(0) によって返された値と比較して、*(&b+3) がリターン アドレスであることを確認しました。
関数の本体でmain
ありf
、変更されていない必要があります。
ありがとう。