#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 *);
void usage(void) {
  printf(
      " [-r|-l] [-H] -u <user> <samhive>\n"
      "Reset password or list users in SAM database\n"
      "Mode:\n"
      "   -r = reset users password\n"
      "   -l = list users in sam\n"
      "Parameters:\n"
      "   <user> can be given as a username or a RID in hex with 0x in front\n"
      "   Example:\n"
      "   -r -u theboss -> resets password of user named 'theboss' if found\n"
      "   -r -u 0x3ea -> resets password for user with RID 0x3ea (hex)\n"
      "   -r -a -> Reset password of all users in administrators group "
      "(0x220)\n"
      "   -r -f -> Reset password of admin user with lowest RID\n"
      "            not counting built-in admin (0x1f4) unless it is the only "
      "admin\n"
      "   Usernames with international characters usually fails to be found,\n"
      "   please use RID number instead\n"
      "   If success, there will be no output, and exit code is 0\n"
      "Options:\n"
      "   -H : For list: Human readable listing (default is parsable table)\n"
      "   -H : For reset: Will output confirmation message if success\n"
      "   -N : No allocate mode, only allow edit of existing values with same "
      "size\n"
      "   -E : No expand mode, do not expand hive file (safe mode)\n"
      "   -t : Debug trace of allocated blocks\n"
      "   -v : Some more verbose messages/debug\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
lea    0xee9(%rip),%rdi
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [1093 x i8] c" [-r|-l] [-H] -u <user> <samhive>\0AReset password or list users in SAM database\0AMode:\0A -r = reset users password\0A -l = list users in sam\0AParameters:\0A <user> can be given as a username or a RID in hex with 0x in front\0A Example:\0A -r -u theboss -> resets password of user named 'theboss' if found\0A -r -u 0x3ea -> resets password for user with RID 0x3ea (hex)\0A -r -a -> Reset password of all users in administrators group (0x220)\0A -r -f -> Reset password of admin user with lowest RID\0A not counting built-in admin (0x1f4) unless it is the only admin\0A Usernames with international characters usually fails to be found,\0A please use RID number instead\0A If success, there will be no output, and exit code is 0\0AOptions:\0A -H : For list: Human readable listing (default is parsable table)\0A -H : For reset: Will output confirmation message if success\0A -N : No allocate mode, only allow edit of existing values with same size\0A -E : No expand mode, do not expand hive file (safe mode)\0A -t : Debug trace of allocated blocks\0A -v : Some more verbose messages/debug\0A\00"
define void @usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([1093 x i8], [1093 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [1092 x i8] c" [-r|-l] [-H] -u <user> <samhive>\0AReset password or list users in SAM database\0AMode:\0A -r = reset users password\0A -l = list users in sam\0AParameters:\0A <user> can be given as a username or a RID in hex with 0x in front\0A Example:\0A -r -u theboss -> resets password of user named 'theboss' if found\0A -r -u 0x3ea -> resets password for user with RID 0x3ea (hex)\0A -r -a -> Reset password of all users in administrators group (0x220)\0A -r -f -> Reset password of admin user with lowest RID\0A not counting built-in admin (0x1f4) unless it is the only admin\0A Usernames with international characters usually fails to be found,\0A please use RID number instead\0A If success, there will be no output, and exit code is 0\0AOptions:\0A -H : For list: Human readable listing (default is parsable table)\0A -H : For reset: Will output confirmation message if success\0A -N : No allocate mode, only allow edit of existing values with same size\0A -E : No expand mode, do not expand hive file (safe mode)\0A -t : Debug trace of allocated blocks\0A -v : Some more verbose messages/debug\00"
define void @usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([1092 x i8], [1092 x i8]* @str, i64 0, i64 0))
ret void
}