This program appears to be a hexadecimal dump utility. It does the following:
- It takes a filename as a command line argument and opens that file for reading
- It reads the file byte by byte until EOF
- For each byte, it prints the hexadecimal value of the byte, in the format "%2x " (i.e. 2 hex digits, a space)
- After every 16 bytes, it prints the ASCII representation of those bytes, replacing non-printable characters with "."
- It also has some obfuscated logic with bitwise operations, likely attempting to confuse the reader.
So if you ran it like this:
./program myfile.txt
It would output something like: 54 65 78 74 20 66 69
6c 65 2e 0a 54 68 69
73 20 69 73 20 61 20
74 65 78 74 20 66 69
6c 65 2e 0a 54 68 65
20 71 75 69 63 6b 20
62 72 6f 77 6e 20 66
6f 78 0a 6a 75 6d 70
73 20 6f 76 65 72 20
20 74 68 65 20 6c 61
7a 79 20 64 6f 67 0a
2e 2e 2e
Which is the hexadecimal dump of the ASCII contents of myfile.txt.The #defines are used to obfuscate the code and make it harder to read, replacing printf with O1O, putchar with OlO, etc. The D() function is used to check if a byte is a printable ASCII character.
So in summary, this program opens a file, reads it byte by byte, prints the hex values, and prints the ASCII for printable characters, as a hexadecimal dump utility.
I'm not ruling out that this LLM output is "partially organic" rather than "fully regurgitated", but I'd be much more interested to see this LLM explain an obfuscated program that hasn't been floating around the Internet for 35 years.
They do much better with popular languages.
So, in other words, they perform precisely how you’d expect a stochastic parrot to perform?
The more popular the language the more likely the training corpus includes both very similar code samples and explanation of those code samples, and also the more likely those two converge on a “reasonable” explanation.
Ask it something it’s likely to have seen an answer for and it’s likely to spit out that answer… interesting? Sure, impressive? Maybe… but still pretty well captured by “a fuzzy jpeg of the web”.
Or exactly like you'd expect a human to perform.
Train a human mostly on English, and they'll speak English. Train them mostly on Chinese, and they'll speak Chinese.
Ahh, but ask a human a question in a language they don’t understand and they’ll look at you with bewilderment, not confidently make up a stream of hallucinatory nonsense that only vaguely looks statistically right.
> Or exactly like you’d expect a human to perform.
Not exactly, no… but with just enough of the uncanny valley to make me think the more interesting thought: are we really not much more than stochastic parrots? Or, in other words, are we naturally just slightly more interesting than today’s state of the artificially stupid?
I mostly agree with the stochastic parrot interpretation, but that doesn't undermine the usefulness or impressiveness. Even if it's just a highly compressed search index, that level of compression is amazing.
Start by find-and-replacing those #defines. You can iteratively deobfuscate things by hand. It's PITA and takes time, but it's doable.
If you hit a roadblock, run it in a VM.
It's just ordinary C code.
Nobody substitutes random three letter strings for keywords in ordinary C code unless they intend on some trivial obfuscation.
define O1O printf
#define OlO putchar
#define O10 exit
#define Ol0 strlen
#define QLQ fopen
#define OlQ fgetc
#define O1Q abs
#define QO0 for
typedef char lOL;It's right here, and your name is on it. https://www.ioccc.org/1986/bright/bright.c
It even won an award! https://www.ioccc.org/1986/bright/hint.html
I cribbed it from system .h files.
I know you mean well but LLMs are the very last resource I'd turn to for help. Those things make crap up all the time.
Bitwise operations are commonplace to improve efficiency.