maybe I'd be better at getting back into my reverse engineering projects if getting back into them didn't involve first figuring out which of the 13 Ghidra versions I have installed is for that project

okay it's not 10.1-beta, because that one was used to hack on Spyro for the GBA, Excel '95, the Tandy-Memorex VIS BIOS, and the FlashPath kernel driver

10.1 non-beta was Railroad Tycoon and "MyPetChimp", whatever that was.

10.1.5 was the DS9 point and click game and a WinCE powered printer

10.1.4 was an aliexpress single-key-keyboard and some parts of the Borland Graphics Interface

9.2.2 was a vape unit I was trying to run Doom on, Duke Nukem 1 for DOS, and Links386 for DOS

okay now I can see why may2023!foone got stuck here. this is so fucking complicated.

I'm trying to decode a scripting language for a video game, but the problem it's not just a bytecode file, it's more like an EXE file. It's got multiple sorts of metadata that has to be properly parsed, and linking that needs to be done, and that task is proving to be a little too hard for my tiny brain

especially because it's doing this kind of... in-place relocation thing?

like the bytecode will be:

pvm_Call 0, 0

and then the relocations will kick in and that'll turn into:

pvm_Call Vanna.revealTile

but because this is all done in an in-place loading style, it's really a pain to understand, so I've not yet been able to write a disassembler

it's also a typed VM, so that makes it even more complicated. (Because the types are stored in the executable metadata)

huh. this game has a "SILENCE LOADING ERRORS" flag. there's no way to turn it on, so loading errors will always be reported.

normally games have a verbose/debug flag that devs turn on, not a "be quiet" flag that never gets turned on

oh god. I thought I'd fill out the resolveTypes function of module loading but it turns out it's a five-pass loader that loads data in place

oh god

if( fixup_passes>=64 ){
btype_failure = true;
}

I think these guys wrote their scripting language so that array types have a declared length, but then neglected to actually tell the script executor about that. it doesn't seem to save that information anywhere or compare it to anything

the worst thing about this particular scripting language is that it's compiled to bytecode, but they also have a debug file that includes all the information removed by byte-compiling. So I have variable names and comments and such, right?

but it's in a separate binary format that I can't load. So it's tempting but also useless

WFCommonJunction::getProfileGender

MY GENDER IS BETWEEN ME AND GOD, YOU CANNOT KNOW IT, GAME FOR THE NINTENDO WII

@foone The relation between gender and a floppy disk is between gender and that floppy disk.

@clayote and I keep my gender on a floppy disk!

wait. shit. oh no... this explains a lot.

Sign in to participate in the conversation
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.