Skip to content

Instantly share code, notes, and snippets.

@glguy

glguy/21.cpp Secret

Last active December 21, 2018 07:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save glguy/6decae4aef30dc3d1810ae6f3b40f977 to your computer and use it in GitHub Desktop.
Save glguy/6decae4aef30dc3d1810ae6f3b40f977 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <unordered_set>
long f(long r0) {
std::unordered_set<long> seen;
long r1=0L, r3=0L, r4=0L, r5=0L;
long prev = 0;
r5 = 123; //seti 123 0 5
line2: r5 &= 456; // bani 5 456 5
r5 = r5 == 72; // eqri 5 72 5
if (r5) goto line6; // addr 5 2 2
goto line2; // seti 0 0 2
line6: r5 = 0; // seti 0 4 5
line7: r4 = r5 | 65536; // bori 5 65536 4
r5 = 15466939; // seti 15466939 9 5
line9: r3 = r4 & 255; // bani 4 255 3
r5 += r3; // addr 5 3 5
r5 &= 16777215; // bani 5 16777215 5
r5 *= 65899; // muli 5 65899 5
r5 &= 16777215; // bani 5 16777215 5
r3 = 256 > r4; // gtir 256 4 3
if (r3) goto line17; // addr 3 2 2
goto line18; // addi 2 1 2
line17: goto line29; // seti 27 8 2
line18: r3 = 0; // seti 0 7 3
line19: r1 = r3 + 1; // addi 3 1 1
r1 *= 256; // muli 1 256 1
r1 = r1 > r4; // gtrr 1 4 1
if (r1) goto line24; // addr 1 2 2
goto line25; // addi 2 1 2
line24: goto line27; // seti 25 2 2
line25: r3 += 1; // addi 3 1 3
goto line19; // seti 17 7 2
line27: r4 = r3; // setr 3 7 4
goto line9; // seti 7 3 2
line29:
if (!seen.insert(r5).second) {
return prev;
}
prev = r5;
/*
line29: r3 = r5 == r0; // eqrr 5 0 3
if (r3) { return r0; } // addr 3 2 2
*/
goto line7; // seti 5 9 2
}
int main(void) {
std::cout << f(0) << std::endl;
}
#![allow(
dead_code,
mutable_transmutes,
non_camel_case_types,
non_snake_case,
non_upper_case_globals,
unused_mut
)]
#![feature(libc)]
extern crate libc;
#[no_mangle]
pub unsafe extern "C" fn run() -> libc::c_long {
let mut r0: libc::c_long = 0i64;
let mut r1: libc::c_long = 0i64;
let mut r3: libc::c_long = 0i64;
let mut r4: libc::c_long = 0i64;
let mut r5: libc::c_long = 0i64;
r5 = 123i32 as libc::c_long;
loop {
r5 &= 456i32 as libc::c_long;
r5 = (r5 == 72i32 as libc::c_long) as libc::c_int as libc::c_long;
if 0 != r5 {
break;
}
}
r5 = 0i32 as libc::c_long;
loop {
r4 = r5 | 65536i32 as libc::c_long;
r5 = 15466939i32 as libc::c_long;
loop {
r3 = r4 & 255i32 as libc::c_long;
r5 += r3;
r5 &= 16777215i32 as libc::c_long;
r5 *= 65899i32 as libc::c_long;
r5 &= 16777215i32 as libc::c_long;
r3 = (256i32 as libc::c_long > r4) as libc::c_int as libc::c_long;
if 0 != r3 {
break;
}
r3 = 0i32 as libc::c_long;
loop {
r1 = r3 + 1i32 as libc::c_long;
r1 *= 256i32 as libc::c_long;
r1 = (r1 > r4) as libc::c_int as libc::c_long;
if 0 != r1 {
break;
}
r3 += 1i32 as libc::c_long
}
r4 = r3
}
r3 = (r5 == r0) as libc::c_int as libc::c_long;
if 0 != r3 {
break;
}
}
return r0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment