Skip to content

Instantly share code, notes, and snippets.

@molenzwiebel
Created June 3, 2023 18:57
Show Gist options
  • Save molenzwiebel/c24fda1da6f42d7a52f169882228d6e2 to your computer and use it in GitHub Desktop.
Save molenzwiebel/c24fda1da6f42d7a52f169882228d6e2 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <inttypes.h>
#include <string.h>
void hexdump(void *ptr, int buflen) {
unsigned char *buf = (unsigned char*)ptr;
int i, j;
for (i=0; i<buflen; i+=16) {
printf("%06x: ", i);
for (j=0; j<16; j++)
if (i+j < buflen)
printf("%02x ", buf[i+j]);
else
printf(" ");
printf(" ");
for (j=0; j<16; j++)
if (i+j < buflen)
printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
printf("\n");
}
}
void do_exit(uint16_t* mem, uint16_t code) {
hexdump(mem, 256);
printf("Done with %hx!\n", code);
exit(0);
}
uint16_t reg0 = 0, reg1 = 0, reg2 = 0, reg3 = 0;
uint16_t mem[128] = {0};
uint16_t stack[128] = {0};
uint16_t stack_pointer = 0;
#define push(x) (stack[stack_pointer++] = x)
#define pop() (stack[--stack_pointer])
void f0();
void f7();
void f10();
void f13();
void f187();
void f20();
void f42();
void f73();
void f170();
void f179();
void f57();
void foo() {
}
void f0() {
_0: reg1 = 0;
_1: reg2 = 0;
_2: reg3 = 0;
_3: f7();
_4: f10();
_5: f13();
_6: f187();
}
void f7() {
_7: reg1 = 0;
_8: f20();
_9: return;
}
void f10() {
_10: reg1 = 0;
_11: f42();
_12: return;
}
void f13() {
_13: reg1 = 48;
_14: f73();
_15: reg1 = 48;
_16: f170();
_17: reg1 = 48;
_18: f179();
_19: return;
}
void f20() {
_20: reg2 = reg1;
_21: reg3 = mem[reg2];
_22: reg2 = reg2 + 1;
_23: reg2 = reg2 % 32;
_24: reg3 = reg3 + mem[reg2];
_25: reg2 = reg2 + 1;
_26: reg2 = reg2 % 32;
_27: reg3 = reg3 + mem[reg2];
_28: reg1 = reg1 + 48;
_29: reg3 = reg3 + 4919;
_30: mem[reg1] = mem[reg1] ^ reg3;
_31: reg1 = reg1 - 48;
_32: reg1 = reg1 + 1;
_33: reg1 = reg1 % 32;
_34: if (reg1 != 0) goto _20;
_35: return;
_36: mem[reg1] = mem[reg1] + reg2;
_37: reg1 = reg1 + 1;
_38: reg3 = reg1;
_39: reg3 = reg3 - 80;
_40: if (reg3 != 0) goto _36;
_41: return;
}
void f42() {
_42: reg2 = reg1;
_43: reg3 = mem[reg2];
_44: reg2 = reg2 + 1;
_45: reg2 = reg2 % 32;
_46: reg3 = reg3 + mem[reg2];
_47: f57();
_48: reg3 = 48;
_49: reg3 = reg1 + reg3;
_50: mem[reg3] = mem[reg3] ^ reg2;
_51: reg2 = 255;
_52: mem[reg3] = mem[reg3] & reg2;
_53: reg1 = reg1 + 1;
_54: reg1 = reg1 % 32;
_55: if (reg1 != 0) goto _42;
_56: return;
}
void f57() {
_57: reg2 = 127;
_58: mem[reg2] = reg1;
_59: reg2 = reg3;
_60: reg2 = reg2 - 1;
_61: reg1 = reg2;
_62: reg1 = reg1 * 3;
_63: reg1 = reg3 - reg1;
_64: if (reg1 == 0) goto _70;
_65: reg1 = reg1 + 1;
_66: if (reg1 == 0) goto _70;
_67: reg1 = reg1 + 1;
_68: if (reg1 == 0) goto _70;
_69: if (reg1 != 0) goto _60;
_70: reg3 = 127;
_71: reg1 = mem[reg3];
_72: return;
}
void f73() {
_73: reg2 = 195;
_74: mem[reg1] = mem[reg1] - reg2;
_75: reg1 = reg1 + 1;
_76: reg2 = 222;
_77: mem[reg1] = mem[reg1] - reg2;
_78: reg1 = reg1 + 1;
_79: reg2 = 44;
_80: mem[reg1] = mem[reg1] - reg2;
_81: reg1 = reg1 + 1;
_82: reg2 = 127;
_83: mem[reg1] = mem[reg1] - reg2;
_84: reg1 = reg1 + 1;
_85: reg2 = 38;
_86: mem[reg1] = mem[reg1] - reg2;
_87: reg1 = reg1 + 1;
_88: reg2 = 127;
_89: mem[reg1] = mem[reg1] - reg2;
_90: reg1 = reg1 + 1;
_91: reg2 = 105;
_92: mem[reg1] = mem[reg1] - reg2;
_93: reg1 = reg1 + 1;
_94: reg2 = 110;
_95: mem[reg1] = mem[reg1] - reg2;
_96: reg1 = reg1 + 1;
_97: reg2 = 12;
_98: mem[reg1] = mem[reg1] - reg2;
_99: reg1 = reg1 + 1;
_100: reg2 = 125;
_101: mem[reg1] = mem[reg1] - reg2;
_102: reg1 = reg1 + 1;
_103: reg2 = 10;
_104: mem[reg1] = mem[reg1] - reg2;
_105: reg1 = reg1 + 1;
_106: reg2 = 12;
_107: mem[reg1] = mem[reg1] - reg2;
_108: reg1 = reg1 + 1;
_109: reg2 = 42;
_110: mem[reg1] = mem[reg1] - reg2;
_111: reg1 = reg1 + 1;
_112: reg2 = 109;
_113: mem[reg1] = mem[reg1] - reg2;
_114: reg1 = reg1 + 1;
_115: reg2 = 8;
_116: mem[reg1] = mem[reg1] - reg2;
_117: reg1 = reg1 + 1;
_118: reg2 = 118;
_119: mem[reg1] = mem[reg1] - reg2;
_120: reg1 = reg1 + 1;
_121: reg2 = 10;
_122: mem[reg1] = mem[reg1] - reg2;
_123: reg1 = reg1 + 1;
_124: reg2 = 15;
_125: mem[reg1] = mem[reg1] - reg2;
_126: reg1 = reg1 + 1;
_127: reg2 = 31;
_128: mem[reg1] = mem[reg1] - reg2;
_129: reg1 = reg1 + 1;
_130: reg2 = 111;
_131: mem[reg1] = mem[reg1] - reg2;
_132: reg1 = reg1 + 1;
_133: reg2 = 24;
_134: mem[reg1] = mem[reg1] - reg2;
_135: reg1 = reg1 + 1;
_136: reg2 = 9;
_137: mem[reg1] = mem[reg1] - reg2;
_138: reg1 = reg1 + 1;
_139: reg2 = 112;
_140: mem[reg1] = mem[reg1] - reg2;
_141: reg1 = reg1 + 1;
_142: reg2 = 49;
_143: mem[reg1] = mem[reg1] - reg2;
_144: reg1 = reg1 + 1;
_145: reg2 = 231;
_146: mem[reg1] = mem[reg1] - reg2;
_147: reg1 = reg1 + 1;
_148: reg2 = 217;
_149: mem[reg1] = mem[reg1] - reg2;
_150: reg1 = reg1 + 1;
_151: reg2 = 24;
_152: mem[reg1] = mem[reg1] - reg2;
_153: reg1 = reg1 + 1;
_154: reg2 = 46;
_155: mem[reg1] = mem[reg1] - reg2;
_156: reg1 = reg1 + 1;
_157: reg2 = 62;
_158: mem[reg1] = mem[reg1] - reg2;
_159: reg1 = reg1 + 1;
_160: reg2 = 220;
_161: mem[reg1] = mem[reg1] - reg2;
_162: reg1 = reg1 + 1;
_163: reg2 = 197;
_164: mem[reg1] = mem[reg1] - reg2;
_165: reg1 = reg1 + 1;
_166: reg2 = 222;
_167: mem[reg1] = mem[reg1] - reg2;
_168: reg1 = reg1 + 1;
_169: return;
}
void f170() {
_170: reg2 = 1;
_171: reg3 = mem[reg1];
_172: if (reg3 != 0) goto _174;
_173: if (reg3 == 0) goto _175;
_174: mem[reg1] = reg2;
_175: reg1 = reg1 + 1;
_176: reg1 = reg1 % 80;
_177: if (reg1 != 0) goto _170;
_178: return;
}
void f179() {
_179: reg2 = 0;
_180: reg3 = mem[reg1];
_181: reg2 = reg3 + reg2;
_182: reg1 = reg1 + 1;
_183: reg1 = reg1 % 80;
_184: if (reg1 != 0) goto _180;
_185: reg1 = reg2;
_186: return;
}
void f187() {
_187: do_exit(mem, reg1);
}
int main() {
memcpy(mem, "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345", 32);
f0();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment