2017年02月15日

残像は有能(雑記)

afterimageって実際かなり有能よね
1.コードとかの数値代入を広範囲にできる
2.afterimagetimeでピンポイントにも弄れる
3.オバステで参照先変更可能
4.リセットは該当箇所を0にするだけ
5.新MUGENでも多分使える

これだけいろんなことに使えるステコンもそうそう無いのでは
...DTCは別の意味で有能だけども

bindtoとpowerも併用すればコードなくてもなんとかなるレベルやし
posted by メロンピエロ at 10:08| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

name+DTCtext+残像でコード実行(追記あり)

2/16追記
重大な欠点を発見したので

nameアドレスの1~3byte目が0だと出力が途中で止まってしまうので変なところにcallして落ちる可能性があります

確率は低いですが一応

2/17追記
%4sじゃ4文字出力できませんでした
正しくは%.4sです

追記おわり


スタックには本体のアドレスが保存してあるので%%.4sでそのアドレスをDTCスタックの1025~1028番目に出力する
1025~1028番目には元々RETN先のアドレスが入っていたのでそこの数値([char+0])に飛んでコードを実行できる
この場合は自分のnameがコードとなって実行されるのでそのnameを有意の文字列にすればやりたい放題

ただ、実際にやってみて問題となったのはコードを文字に起こすのが難しいということ
ヌル文字やシステム管理部分の文字は使えないのに加えて、文字が割り当てられていない数値だとnameに取れないのであまり複雑なコードを実行できなかった

そこでnameのコードは出来るだけ最小限にして、別の箇所でコードを実行できる場所を探すことになった

まず考えたのはスタック内にあるDTCのtext
ここなら最大5文字まで%cで好きな文字を出力できる(ヌル文字や%とか以外)
つまり「文字に起こせない数値」でも%cなら出力できる

これなら行けそうかな、と思ってやってみたところ
コードの全てを実行するには%cで補助してもまだ足りないほどの「文字に起こせない数値」が出てきてしまった

そこで、DTCのtext部分を経由してさらに別の箇所に飛ぶことにした

そして思いついたのが残像
ここなら事前にafterimageを実行して、パラメータにコードを埋め込んでおけばどうにかしてそこに飛びさえすれば好きなコードを実行できる

これを使ったら
1.nameでコード実行
2.DTCのtextでコード実行
3.残像のパラメータでコード実行

ステコン数にしてわずか4つ
(コード用の残像とDTC、代入先指定でhitfallset、残像アドレス修復用のDTC)
で自己アドレスを取得できるようになった

nameを任意のものにしておく必要があるのでname変えたくない人にはオススメできないけど、それなりに実用性があるものに仕上がったかなと

暇があったらテンプレみたいなものを公開するかもしれません...時間があれば...
posted by メロンピエロ at 01:12| Comment(0) | MUGEN | このブログの読者になる | 更新情報をチェックする

2017年01月27日

前記事の続き(bindtotargetなど)

前記事で「結論から言うとできない」って言ったやつの解説
bindtorootとbindtoparentはステコン実行時に[Pアド+0x3434]とかに参照先アドレスを代入してるのだけれども、実際にpos等に数値代入するのはF処理終了時(もしかしたらキャラ処理終了時かも?、未検証)
だからキャラ処理でそこの数値を書き換えてやれば終了時に数値取得ができる

一方、target関連はというと

1.bindtotargetについて
これはステコン実行時にアドレスを保存せず、しかもF終了時ではなく即時に位置が変わっているみたい
よって、参照先を変えたいならtarget参照先弄りで変える必要がある

target参照先弄りは、%n等を用いて複数回アドレス取得する必要があるのでそれを行うくらいならpowerと残像使ってサクッと参照した方が楽(というかオバステじゃそもそも無理)


2.targetbindについて
こっちは即時にタゲ先の座標が移動するわけではなく、F終了時に座標移動
でも残念ながら参照や代入は独自にアドレス保存してやるわけではなく、target管理先のアドレスや自己アドレスをそのまま用いてる
(ちなみにpos=x,yと書くところの数値は
[[Pアド+0x220]+0x14]+Cとか+10にあったりする)
そのため、こちらも代入先を変えたければtarget参照先弄りを使う必要がある


以上より、bindtotargetとtargetbindを用いて簡単に参照や代入をするのは難しいと判断した

まあ狭い範囲の参照ならアドレス取得してpowerで見ればいいし、広範囲参照ならparentなり使えば良い
bindtorootのやつで便利になるのはコード使わないで基準アドレス取得するオバステ親捏造かな
書き換えるのに若干不安があるparent参照先弄りよりも書き換えても安全なbindtoだと取得が1F遅れるとしても採用する価値はあると思う

posted by メロンピエロ at 01:09| Comment(1) | MUGEN | このブログの読者になる | 更新情報をチェックする