#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, char *);
void usage(char *name) {
  printf("\nUsage: %s -f <hash_file> -d <dictionary_file>\n\n"
         "Options:\n\n"
         "  -h"
         "\t\t\tShow this help\n"
         "  -f"
         "\t\tPath to your input hash file (HashExtractor output)\n"
         "  -d"
         "\t\tPath to dictionary or alphabet file\n"
         "  -s"
         "\t\tStrict check (use only in case of false positives, faster "
         "solution)\n"
         "  -m"
         "\t\tMAC comparison (use only in case of false positives, slower "
         "solution)\n"
         "  -u"
         "\t\tAttack User Password authentication method\n"
         "  -r"
         "\t\tAttack Recovery Password authentication method\n"
         "  -p"
         "\t\tPlatform\n"
         "  -g"
         "\t\tDevice number\n"
         "  -t"
         "\t\tSet the number of password per thread threads\n"
         "  -b"
         "\t\tSet the number of blocks\n\n",
         name);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rsi
lea    0xed9(%rip),%rdi
call   1030 <printf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
mov    %rdi,%rsi
lea    0xee6(%rip),%rdi
jmp    1030 <printf@plt>

LLVM IR (-O0):
@.str = [552 x i8] c"\0AUsage: %s -f <hash_file> -d <dictionary_file>\0A\0AOptions:\0A\0A -h\09\09\09Show this help\0A -f\09\09Path to your input hash file (HashExtractor output)\0A -d\09\09Path to dictionary or alphabet file\0A -s\09\09Strict check (use only in case of false positives, faster solution)\0A -m\09\09MAC comparison (use only in case of false positives, slower solution)\0A -u\09\09Attack User Password authentication method\0A -r\09\09Attack Recovery Password authentication method\0A -p\09\09Platform\0A -g\09\09Device number\0A -t\09\09Set the number of password per thread threads\0A -b\09\09Set the number of blocks\0A\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = call i32 @printf(i8* getelementptr inbounds ([552 x i8], [552 x i8]* @.str, i64 0, i64 0), i8* %3)
ret void
}

LLVM IR (-O2):
@.str = [552 x i8] c"\0AUsage: %s -f <hash_file> -d <dictionary_file>\0A\0AOptions:\0A\0A -h\09\09\09Show this help\0A -f\09\09Path to your input hash file (HashExtractor output)\0A -d\09\09Path to dictionary or alphabet file\0A -s\09\09Strict check (use only in case of false positives, faster solution)\0A -m\09\09MAC comparison (use only in case of false positives, slower solution)\0A -u\09\09Attack User Password authentication method\0A -r\09\09Attack Recovery Password authentication method\0A -p\09\09Platform\0A -g\09\09Device number\0A -t\09\09Set the number of password per thread threads\0A -b\09\09Set the number of blocks\0A\0A\00"
define void @usage(i8* %0) {
%2 = tail call i32 @printf(i8* getelementptr inbounds ([552 x i8], [552 x i8]* @.str, i64 0, i64 0), i8* %0)
ret void
}