HSPはループなどは処理が遅いので
(インタプリタなので当然ですが)
1バイト置き換えするところをマシン語化してみました。
内部でサイズチェックはしていませんので、
バッファオーバーフローに注意してください。
#module "_ReplaceByte_"
#uselib "kernel32.dll"
#func VirtualProtect "VirtualProtect" var,int,int,var
#define xdim(%1,%2) dim %1,%2: VirtualProtect %1,%2*4,$40,AZSD
#deffunc ReplaceByte var src, int srcsize, int a, int b
xdim fncode,40
fncode.0 = 0x33EC8B55, 0x0C4D39C9, 0x458B187E, 0x0FC10308, 0x553B10BE, 0x8A057510
fncode.6 = 0x10881455, 0x0C4D3B41, 0xC033E87C, 0x0010C25D
prm.0 = varptr(src), srcsize, a, b
return callfunc(prm, varptr(fncode), 4)
#global
sdim buf,256
// 0x00 を 0x20 に 1byte 置き換え
ReplaceByte buf,256,0x00,0x20