Tuesday, June 12, 2018

SprintDLL - Starting copyslot improvements

SprintDLL's copyslot command supports some offsets and pointer derefererencing, but not combinations of those. Therefore, it always takes multiple instructions to get the value pointed to by a field, and it's literally impossible to deal with arrays. So today I started working on improvements to the instruction to allow things like someSlot field 5 dereferenced as a source or destination. I have a function to parse multiple qualifiers, but there's a snag: it's not possible for SprintDLL to know the kind of value at such an adjusted location, so it can't know how much to copy. Therefore I'm going to need to introduce a switch on copyslot to allow the user to specify the size of the destination region.

I also discovered a bug in the existing implementation: specifying qualifiers for the destination but not the source causes the destination's qualifiers to be ignored because of an ill-conceived optimization. The new implementation will fix that.

There's now a predefined zero slot that, unsurprisingly, holds a bunch of zero bytes. It's suitable for zeroing out a region by serving as a source slot in copyslot.

No comments:

Post a Comment