#include "osecpu_ask.h" DB(0x03,0x81-0x40); DDBE(0); junkApi_fopenRead(R00, P01, 1);関数jitCompilerでPLIMMをコンパイルする際にレジスタの番号をチェックしていないため、構造体Regsのポインタレジスタより高位のメモリ領域を破壊できてしまうことが原因だと思われます。 -- yao 2014-03-31 (月) 14:01:15
たとえばこんな状況: R00に0x12、R01に0x34が入っている。R00とR01はどちらもbit=32。これらを足し合わせて、下位4ビットだけがほしい。 これには2つの書き方がある。 (1) ADD(32, R02, R00, R01); LIMM(4, R3F, 0x0f); AND(4, R02, R02, R3F); (2) PREFIX_2F(0); ADD(4, R02, R00, R01); LIMM(4, R3F, 0x0f); AND(4, R02, R02, R3F); 1のやり方はプレフィクスがいらないけど、ADDは32ビットで演算している。これは必要のない精度の計算だといえる。 無駄な書き方を「強要」しなければいけないとしたら、それは本当に「いい仕様」といえるだろうか? それに対して2は不要な演算は全くない。
// この変更はosecpu117d専用です。
// other.c 121行目付近
fin:
if (retcode == -1)
retcode = 0;
fin1:
return retcode;
}
Int32 apiGetRxx(OsecpuVm *vm, int r, int bit); // ←この一行を追加
int jitcAfterStepOther(OsecpuJitc *jitc)
{
int i, retcode = 0;
if (jitc->hh4Buffer[0] != 0x2f) {
// decode.c 1行目付近
#include "osecpu-vm.h"
// #include "tek.c" //←この一行をコメントアウト
typedef unsigned char UCHAR;
typedef unsigned int UINT32;
typedef UINT32 tek_TPRB;
int tek_lzrestore_tek5(int srcsiz, UCHAR *src, int outsiz, UCHAR *outbuf);
// ↑この4行を追加
以上の修正をすれば、通常版osecpu-vmをVisualStudioでもコンパイルできます。 -- ttwilb 2014-07-06 (日) 19:38:40 if(preg_match('/\s/', $page)) exit;
もしかするとスパムアクセスに効果があるかもしれません。 -- ttwilb 2015-03-28 (土) 09:48:57| コメント | お名前 | NameLink | |