制作日記

こういうの作った方が、逃げにくいじゃない

用語解説(persistent弄り)

新規技術関連でしてみようと思ったけど、分かりにくい……
前提知識をどの程度に据えれば良いのかわからんから、難しい
ズブの素人にわかるような説明なんて、自分には無理だし

persistent弄りの説明をするとなると、

関数とは何か
引数とは何か
スタックとは何か
関数呼び出しとは何か
引数の引き渡し方法

の説明しないと駄目なわけだ

これらを理解するには、基礎的なプログラミング言語とアセンブラの知識が必要不可欠

以下、雑な概要説明であって、正確な説明ではないので注意
どうしても正確な情報を知りたいなら、アセンブラの勉強してみれば良いかもねー
基本情報取れる程度の知識があれば、十分理解できるかな?
アレの受験者の平均レベルがよくわからん
何であれで合格率が2割前後なんだろうね
7割が記念受験と無勉強での突貫としか思えない

関数
 任意の処理を一塊にして名前を付けたもの
 何度も同じ処理を書くのは冗長なので、処理を別の場所に書いておいて、
 関数名でその処理を呼び出すことができる
 例えば、animというトリガーはanim番号を取得する処理を呼び出している

引数
 関数に与える情報
 全く同じ処理しかできないのでは、関数の汎用性は低くなってしまう
 そこで、関数に情報を与えてやり、その情報によって処理を分岐させる
 例えば、トリガーvar(x)ではxが引数となる
 関数varに対して、欲しい変数の番号を与えてやることで、varで得られる値を変更している

スタック
 LIFO(Last In First Out)のデータ構造
変数の管理方法で、イメージとしては箱を積み上げていく感じ
 保存する(PUSH)場合は一番上に置き、取り出す(POP)場合は一番上から取る
 そうすると、最後に保存した値を最初に取り出すことになるのでLIFO

関数呼び出し
 関数を呼び出すというのはステート移動に近い
 異なる点は、飛んだ先のステート処理が終わった場合、元のステートに戻り
 selfstate(changestate)したステコンの次から処理が始まる点
 スタック上にどのステートから移動してきたか(リターンアドレス)を保存することで、実現している

引数の引き渡し方法
 これも大体の場合はスタックで行われる
 関数を呼び出す前に、引き渡したい引数をスタックに積み上げる
 そして、関数を呼び出す(このとき自動的にリターンアドレスがスタックに積まれる)
 呼び出された側は、スタックに引数が積まれているものとして動作する
 DTCの場合は、textの文字列とparamに設定した値が引数として渡されることになる

persistent弄り
 スタックはどんどん積み上げていく物なので、無理やりさかのぼってスタック上の値を閲覧してやれば、
 自身より前に呼び出された関数の引数を閲覧したりもできる
 例えば、関数A(引数2個)を呼び出し、関数Aから関数B(引数2個)を呼び出したとする
 このとき、関数Bにてスタック上から3個引数を取り出すと、関数Aの引数を取り出すことができる
 DTCのpersisten弄りも同じ原理を使用している
 DTCはtext中の%単体(正確には奇数個連続した%)の数からparamsの個数を判断しており、
 %%はparamsの個数には数えられない
 ところが実際には、%%pのように記述するとDTCはparamsの値を表示しようとする
 すると、paramsに設定した値より多くの引数を表示しようとするため、
 関数呼び出しの際にスタックに積んだ個数より多くの引数を取り出そうとする
 このとき、上記した関数Bから関数Aの引数の取得が行われる

 ステコンの処理の前は、ステコン処理の管理となる
 この処理では実行中ステコンのpersistent管理が行われており、
 対象ステコンのpersistent管理変数のアドレスがスタックに積まれている
 この値を上記の方法を用いてDTCで参照し、%nで書き換えてやることで、
 現在実行中のステコンのpersistent管理変数を書き換えることが可能となる

 このpersistent管理変数が更新されるのは個別ステートのステコン実行時である
 よって、2Pの処理直後、1Pが常時監視ステートでpersistent弄りを行うと、
 2Pが最後に実行したステートのpersisntent管理変数を書き換えることになる

statedefとDTCでのメモリ破壊(ver1.7と1.8)は概要説明してあるし、
上記の説明とかなり被ってる

実際にはかなり雑な説明で、間違いも含まれてるので注意
あくまでも、雰囲気を掴むための概要説明
間違いだらけってわかる程度に知識があるなら、そもそもこんな説明いらないだろうしね

個人的にはARMのアセンブラに触れる機会の方が多いんですよねー
読むの専門で書くのはからっきしですけど

コメントの投稿

非公開コメント

プロフィール

Author:drab
霊夢改変キャラ
「12 3 ! {V} [_]」
公開中
L霊夢でもl_reimuでも好きなように読んでください

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク