So how do you determine undefined behavior in a language you are reverse engineering?

I generated a list of all possible commands in INRAC. That was easy enough to do as everything is pretty much separated by spaces. I also resorted to writing my own INRAC programs to play around with some of the odder parts of the language. By doing those things, I'm able to see what various constructs do in order to reverse engineer this bizarre language.

For instance, *6.2&N. That's a call to section 6, lines that have two letter labels where the second letter is “N”. So, any of the following lines:

>
```
AN boredom 8 bored 7 bore 7 gloom 8 gloomy 8 empty 8 hollow
BN stupidity 8 stupid 7 idiot 7 folly 8 silly 7 fool 7 jerk
CN feeling 12 feel 7 emotion 7 passion 8 passionate 8 hysterical
DN craziness 8 crazy 8 bananas 8 random 8 strange 8 weird
DN humor 7 joke 7 jokes
EN doubt
GN junk 12 stinks 8 cruel 8 useless 8 lousy 8 bad 7 garbage
HN idleness 8 lazy 7 loafer 8 easy
JN art 8 creative 7 artist 7 life 8 alive
...
MP pray 8 holy
...
```

Assuming it picks “EN”, *6.2&N will return “doubt”. But if you change it to *6.4&N, and it still picks line “EN” you'll get “doubting”. Change the second number and you'll get “doubted”, “doubter” and even “doubtingness”. In looking at the section header, this has a (what I'm calling) “parsing value” of 2, which I think means “this is a list of verbs, conjugate depending upon second number.”

In the above code snippet, the numbers apply to the word following and inform INRAC of what to return for that part of speech (say for irregular verbs). There also appears to be synonyms thrown in. For instance, I wrote:

>
```
X *6MP *6.1MP *6.2MP *6.3MP *6.4MP *6.5MP *6.6MP *6.7MP *6.8MP *6.0MP
```

And got the following output:

>
```
prayes prayes pray prayed praying prayed prayer holiness holy pray
```

So it appears that the word defined for “.8” also affects the word defined for “.7”. Interesting.

I'm not sure what >31*6.2()47 fully does (examples from yesterday [1]). It does set variable 31 to a random conjugated verb in section 6 but I can't determine what else it does. The parenthesis don't seem to do anything, nor does the extra number at the end.

I also figured out what !2*11&npr does. It sets variable 2 to the output of calling section 11, lines labeled with a term endig in “npr”. But it also outputs the section; >2*11&npr would just do an assignment with no output. This bit of weirdness: !2'3'4*11&npr, does the same as !2*11&npr but clears variables 3 and 4. Go figure.

[1] /boston/2015/12/29.1

Gemini Mention this post

Contact the author