/*! Try out the obfuscation live! ``` cargo rustc --release --example obfuscation -- --emit asm -C "llvm-args=-x86-asm-syntax=intel" ``` Inspect `target/release/examples/obfuscation.s` to see the compiled code. These examples are #[inline(never)] to aid inspection of the generated code. In practice the generated code is inlined and mixed with their surrounding code. */ #[inline(never)] fn obfstmt() -> i32 { let mut i = 0; // trace_macros!(true); obfstr::obfstmt! { i = 5; i *= 24; i -= 10; i += 8; i *= 28; i -= 18; i += 1; i *= 21; i -= 11; } // trace_macros!(false); assert_eq!(i, 69016); i } #[inline(never)] fn obfstr() { print(obfstr::obfstr!("Hello world!")); print(obfstr::obfstr!("AB")); print(obfstr::obfstr!("This literal is very very very long to see if it correctly handles long strings")); } #[inline(never)] fn xref() -> &'static i32 { static FOO: i32 = 3141592; obfstr::xref!(&FOO) } fn main() { println!("obfstmt: {}", obfstmt()); obfstr(); println!("xref: {}", xref()); } #[inline(never)] fn print(s: &str) { println!("obfstr: {}", s); }