From 0a330d43354c0ea3868e9f03fab5de995e56c0b2 Mon Sep 17 00:00:00 2001 From: jsteube Date: Fri, 23 Sep 2016 21:41:05 +0200 Subject: [PATCH] Rewrote logfile handling from scratch --- include/hash_management.h | 3 + include/logfile.h | 33 +++---- include/types.h | 19 +++-- include/user_options.h | 2 + src/hash_management.c | 59 +++++++++++++ src/hashcat.c | 175 +++++++------------------------------- src/logfile.c | 92 ++++++++------------ src/user_options.c | 86 +++++++++++++++++++ 8 files changed, 244 insertions(+), 225 deletions(-) diff --git a/include/hash_management.h b/include/hash_management.h index b2a97e765..88a808984 100644 --- a/include/hash_management.h +++ b/include/hash_management.h @@ -19,7 +19,10 @@ int check_cracked (opencl_ctx_t *opencl_ctx, hc_device_param_t *device_param, co int hashes_init_stage1 (hashes_t *hashes, const hashconfig_t *hashconfig, potfile_ctx_t *potfile_ctx, outfile_ctx_t *outfile_ctx, user_options_t *user_options, char *hash_or_file); int hashes_init_stage2 (hashes_t *hashes, const hashconfig_t *hashconfig, opencl_ctx_t *opencl_ctx, user_options_t *user_options); +int hashes_init_stage3 (hashes_t *hashes, hashconfig_t *hashconfig, user_options_t *user_options); void hashes_destroy (hashes_t *hashes); +void hashes_logger (const hashes_t *hashes, const logfile_ctx_t *logfile_ctx); + #endif // _HASH_MANAGEMENT_H diff --git a/include/logfile.h b/include/logfile.h index fde68d2a7..c40aea6b5 100644 --- a/include/logfile.h +++ b/include/logfile.h @@ -13,29 +13,32 @@ // logfile_append() checks for logfile_disable internally to make it easier from here -#define logfile_top_msg(msg) logfile_append (user_options, "%s\t%s", data.topid, (msg)); -#define logfile_sub_msg(msg) logfile_append (user_options, "%s\t%s\t%s", data.topid, data.subid, (msg)); -#define logfile_top_var_uint64(var,val) logfile_append (user_options, "%s\t%s\t%" PRIu64 "", data.topid, (var), (val)); -#define logfile_sub_var_uint64(var,val) logfile_append (user_options, "%s\t%s\t%s\t%" PRIu64 "", data.topid, data.subid, (var), (val)); -#define logfile_top_var_uint(var,val) logfile_append (user_options, "%s\t%s\t%u", data.topid, (var), (val)); -#define logfile_sub_var_uint(var,val) logfile_append (user_options, "%s\t%s\t%s\t%u", data.topid, data.subid, (var), (val)); -#define logfile_top_var_char(var,val) logfile_append (user_options, "%s\t%s\t%c", data.topid, (var), (val)); -#define logfile_sub_var_char(var,val) logfile_append (user_options, "%s\t%s\t%s\t%c", data.topid, data.subid, (var), (val)); -#define logfile_top_var_string(var,val) if ((val) != NULL) logfile_append (user_options, "%s\t%s\t%s", data.topid, (var), (val)); -#define logfile_sub_var_string(var,val) if ((val) != NULL) logfile_append (user_options, "%s\t%s\t%s\t%s", data.topid, data.subid, (var), (val)); +#define logfile_top_msg(msg) logfile_append (logfile_ctx, "%s\t%s", logfile_ctx->topid, (msg)); +#define logfile_sub_msg(msg) logfile_append (logfile_ctx, "%s\t%s\t%s", logfile_ctx->topid, logfile_ctx->subid, (msg)); +#define logfile_top_var_uint64(var,val) logfile_append (logfile_ctx, "%s\t%s\t%" PRIu64 "", logfile_ctx->topid, (var), (val)); +#define logfile_sub_var_uint64(var,val) logfile_append (logfile_ctx, "%s\t%s\t%s\t%" PRIu64 "", logfile_ctx->topid, logfile_ctx->subid, (var), (val)); +#define logfile_top_var_uint(var,val) logfile_append (logfile_ctx, "%s\t%s\t%u", logfile_ctx->topid, (var), (val)); +#define logfile_sub_var_uint(var,val) logfile_append (logfile_ctx, "%s\t%s\t%s\t%u", logfile_ctx->topid, logfile_ctx->subid, (var), (val)); +#define logfile_top_var_char(var,val) logfile_append (logfile_ctx, "%s\t%s\t%c", logfile_ctx->topid, (var), (val)); +#define logfile_sub_var_char(var,val) logfile_append (logfile_ctx, "%s\t%s\t%s\t%c", logfile_ctx->topid, logfile_ctx->subid, (var), (val)); +#define logfile_top_var_string(var,val) if ((val) != NULL) logfile_append (logfile_ctx, "%s\t%s\t%s", logfile_ctx->topid, (var), (val)); +#define logfile_sub_var_string(var,val) if ((val) != NULL) logfile_append (logfile_ctx, "%s\t%s\t%s\t%s", logfile_ctx->topid, logfile_ctx->subid, (var), (val)); -#define logfile_top_uint64(var) logfile_top_var_uint64 (#var, (var)); -#define logfile_sub_uint64(var) logfile_sub_var_uint64 (#var, (var)); #define logfile_top_uint(var) logfile_top_var_uint (#var, (var)); #define logfile_sub_uint(var) logfile_sub_var_uint (#var, (var)); +#define logfile_top_uint64(var) logfile_top_var_uint64 (#var, (var)); +#define logfile_sub_uint64(var) logfile_sub_var_uint64 (#var, (var)); #define logfile_top_char(var) logfile_top_var_char (#var, (var)); #define logfile_sub_char(var) logfile_sub_var_char (#var, (var)); #define logfile_top_string(var) logfile_top_var_string (#var, (var)); #define logfile_sub_string(var) logfile_sub_var_string (#var, (var)); -char *logfile_generate_topid (void); -char *logfile_generate_subid (void); +void logfile_generate_topid (logfile_ctx_t *logfile_ctx); +void logfile_generate_subid (logfile_ctx_t *logfile_ctx); + +void logfile_append (const logfile_ctx_t *logfile_ctx, const char *fmt, ...); -void logfile_append (const user_options_t *user_options, const char *fmt, ...); +void logfile_init (logfile_ctx_t *logfile_ctx, const user_options_t *user_options, const folder_config_t *folder_config); +void logfile_destroy (logfile_ctx_t *logfile_ctx); #endif // _LOGFILE_H diff --git a/include/types.h b/include/types.h index 826f3b8fc..c34572bc6 100644 --- a/include/types.h +++ b/include/types.h @@ -186,6 +186,16 @@ typedef struct } hash_t; +typedef struct +{ + bool enabled; + + char *logfile; + char *topid; + char *subid; + +} logfile_ctx_t; + typedef struct { char *hashfile; @@ -956,14 +966,6 @@ typedef struct void *hm_xnvctrl; hm_attrs_t hm_device[DEVICES_MAX]; - /** - * logging - */ - - char *logfile; - char *topid; - char *subid; - /** * crack-per-time */ @@ -1000,6 +1002,7 @@ typedef struct bitmap_ctx_t *bitmap_ctx; induct_ctx_t *induct_ctx; outcheck_ctx_t *outcheck_ctx; + logfile_ctx_t *logfile_ctx; /** * used for restore diff --git a/include/user_options.h b/include/user_options.h index 5cdeebb1b..677cd29b6 100644 --- a/include/user_options.h +++ b/include/user_options.h @@ -253,4 +253,6 @@ int user_options_sanity (user_options_t *user_options, int myargc, char **myargv int user_options_extra_init (user_options_t *user_options, int myargc, char **myargv, user_options_extra_t *user_options_extra); +void user_options_logger (const user_options_t *user_options, const logfile_ctx_t *logfile_ctx); + #endif // _USER_OPTIONS_H diff --git a/src/hash_management.c b/src/hash_management.c index 6f3a9456f..b2ea6a014 100644 --- a/src/hash_management.c +++ b/src/hash_management.c @@ -9,6 +9,7 @@ #include "timer.h" #include "memory.h" #include "logging.h" +#include "logfile.h" #include "ext_OpenCL.h" #include "ext_ADL.h" #include "ext_nvapi.h" @@ -1450,6 +1451,52 @@ int hashes_init_stage2 (hashes_t *hashes, const hashconfig_t *hashconfig, opencl return 0; } +int hashes_init_stage3 (hashes_t *hashes, hashconfig_t *hashconfig, user_options_t *user_options) +{ + hashconfig_general_defaults (hashconfig, hashes, user_options); + + if (hashes->salts_cnt == 1) + hashconfig->opti_type |= OPTI_TYPE_SINGLE_SALT; + + if (hashes->digests_cnt == 1) + hashconfig->opti_type |= OPTI_TYPE_SINGLE_HASH; + + if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) + hashconfig->opti_type |= OPTI_TYPE_NOT_ITERATED; + + if (user_options->attack_mode == ATTACK_MODE_BF) + hashconfig->opti_type |= OPTI_TYPE_BRUTE_FORCE; + + if (hashconfig->opti_type & OPTI_TYPE_BRUTE_FORCE) + { + if (hashconfig->opti_type & OPTI_TYPE_SINGLE_HASH) + { + if (hashconfig->opti_type & OPTI_TYPE_APPENDED_SALT) + { + if (hashconfig->opts_type & OPTS_TYPE_ST_ADD80) + { + hashconfig->opts_type &= ~OPTS_TYPE_ST_ADD80; + hashconfig->opts_type |= OPTS_TYPE_PT_ADD80; + } + + if (hashconfig->opts_type & OPTS_TYPE_ST_ADDBITS14) + { + hashconfig->opts_type &= ~OPTS_TYPE_ST_ADDBITS14; + hashconfig->opts_type |= OPTS_TYPE_PT_ADDBITS14; + } + + if (hashconfig->opts_type & OPTS_TYPE_ST_ADDBITS15) + { + hashconfig->opts_type &= ~OPTS_TYPE_ST_ADDBITS15; + hashconfig->opts_type |= OPTS_TYPE_PT_ADDBITS15; + } + } + } + } + + return 0; +} + void hashes_destroy (hashes_t *hashes) { myfree (hashes->digests_buf); @@ -1487,3 +1534,15 @@ void hashes_destroy (hashes_t *hashes) hashes->hash_info = NULL; } + +void hashes_logger (const hashes_t *hashes, const logfile_ctx_t *logfile_ctx) +{ + logfile_top_string (hashes->hashfile); + logfile_top_uint (hashes->hashlist_mode); + logfile_top_uint (hashes->hashlist_format); + logfile_top_uint (hashes->hashes_cnt); + logfile_top_uint (hashes->digests_cnt); + logfile_top_uint (hashes->digests_done); + logfile_top_uint (hashes->salts_cnt); + logfile_top_uint (hashes->salts_done); +} diff --git a/src/hashcat.c b/src/hashcat.c index a9d6c790e..65734e873 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -307,6 +307,24 @@ int main (int argc, char **argv) return 0; } + /** + * logfile init + */ + + logfile_ctx_t *logfile_ctx = (logfile_ctx_t *) mymalloc (sizeof (logfile_ctx_t)); + + data.logfile_ctx = logfile_ctx; + + logfile_init (logfile_ctx, user_options, folder_config); + + logfile_generate_topid (logfile_ctx); + + logfile_top_msg ("START"); + + /** + * process user input + */ + user_options_extra_t *user_options_extra = (user_options_extra_t *) mymalloc (sizeof (user_options_extra_t)); data.user_options_extra = user_options_extra; @@ -319,6 +337,8 @@ int main (int argc, char **argv) if (rc_user_options_sanity == -1) return -1; + user_options_logger (user_options, logfile_ctx); + /** * Inform user things getting started, * - this is giving us a visual header before preparations start, so we do not need to clear them afterwards @@ -369,101 +389,6 @@ int main (int argc, char **argv) set_cpu_affinity (user_options->cpu_affinity); } - /** - * logfile init - */ - - if (user_options->logfile_disable == false) - { - char *logfile = (char *) mymalloc (HCBUFSIZ_TINY); - - snprintf (logfile, HCBUFSIZ_TINY - 1, "%s/%s.log", folder_config->session_dir, user_options->session); - - data.logfile = logfile; - - char *topid = logfile_generate_topid (); - - data.topid = topid; - } - - logfile_top_msg ("START"); - - logfile_top_uint (user_options->attack_mode); - logfile_top_uint (user_options->benchmark); - logfile_top_uint (user_options->stdout_flag); - logfile_top_uint (user_options->bitmap_min); - logfile_top_uint (user_options->bitmap_max); - logfile_top_uint (user_options->debug_mode); - logfile_top_uint (user_options->force); - logfile_top_uint (user_options->kernel_accel); - logfile_top_uint (user_options->kernel_loops); - logfile_top_uint (user_options->nvidia_spin_damp); - logfile_top_uint (user_options->hash_mode); - logfile_top_uint (user_options->hex_charset); - logfile_top_uint (user_options->hex_salt); - logfile_top_uint (user_options->hex_wordlist); - logfile_top_uint (user_options->increment); - logfile_top_uint (user_options->increment_max); - logfile_top_uint (user_options->increment_min); - logfile_top_uint (user_options->keyspace); - logfile_top_uint (user_options->left); - logfile_top_uint (user_options->logfile_disable); - logfile_top_uint (user_options->loopback); - logfile_top_uint (user_options->markov_classic); - logfile_top_uint (user_options->markov_disable); - logfile_top_uint (user_options->markov_threshold); - logfile_top_uint (user_options->outfile_autohex); - logfile_top_uint (user_options->outfile_check_timer); - logfile_top_uint (user_options->outfile_format); - logfile_top_uint (user_options->potfile_disable); - logfile_top_string (user_options->potfile_path); - logfile_top_uint (user_options->powertune_enable); - logfile_top_uint (user_options->scrypt_tmto); - logfile_top_uint (user_options->quiet); - logfile_top_uint (user_options->remove); - logfile_top_uint (user_options->remove_timer); - logfile_top_uint (user_options->restore); - logfile_top_uint (user_options->restore_disable); - logfile_top_uint (user_options->restore_timer); - logfile_top_uint (user_options->rp_gen); - logfile_top_uint (user_options->rp_gen_func_max); - logfile_top_uint (user_options->rp_gen_func_min); - logfile_top_uint (user_options->rp_gen_seed); - logfile_top_uint (user_options->runtime); - logfile_top_uint (user_options->segment_size); - logfile_top_uint (user_options->show); - logfile_top_uint (user_options->status); - logfile_top_uint (user_options->machine_readable); - logfile_top_uint (user_options->status_timer); - logfile_top_uint (user_options->usage); - logfile_top_uint (user_options->username); - logfile_top_uint (user_options->version); - logfile_top_uint (user_options->weak_hash_threshold); - logfile_top_uint (user_options->workload_profile); - logfile_top_uint64 (user_options->limit); - logfile_top_uint64 (user_options->skip); - logfile_top_char (user_options->separator); - logfile_top_string (user_options->cpu_affinity); - logfile_top_string (user_options->custom_charset_1); - logfile_top_string (user_options->custom_charset_2); - logfile_top_string (user_options->custom_charset_3); - logfile_top_string (user_options->custom_charset_4); - logfile_top_string (user_options->debug_file); - logfile_top_string (user_options->opencl_devices); - logfile_top_string (user_options->opencl_platforms); - logfile_top_string (user_options->opencl_device_types); - logfile_top_uint (user_options->opencl_vector_width); - logfile_top_string (user_options->induction_dir); - logfile_top_string (user_options->markov_hcstat); - logfile_top_string (user_options->outfile); - logfile_top_string (user_options->outfile_check_dir); - logfile_top_string (user_options->rule_buf_l); - logfile_top_string (user_options->rule_buf_r); - logfile_top_string (user_options->session); - logfile_top_string (user_options->truecrypt_keyfiles); - logfile_top_string (user_options->veracrypt_keyfiles); - logfile_top_uint (user_options->veracrypt_pim); - /** * Init OpenCL library loader */ @@ -617,11 +542,6 @@ int main (int argc, char **argv) if (rc_hashes_init_stage1 == -1) return -1; - logfile_top_var_string ("hashfile", hashes->hashfile); - - logfile_top_uint (hashes->hashlist_mode); - logfile_top_uint (hashes->hashlist_format); - if ((user_options->keyspace == false) && (user_options->stdout_flag == false) && (user_options->opencl_info == false)) { if (hashes->hashes_cnt == 0) @@ -657,59 +577,24 @@ int main (int argc, char **argv) } /** - * load hashes, stage 2 + * load hashes, stage 2, remove duplicates, build base structure */ - uint hashes_cnt_orig = hashes->hashes_cnt; + const u32 hashes_cnt_orig = hashes->hashes_cnt; const int rc_hashes_init_stage2 = hashes_init_stage2 (hashes, hashconfig, opencl_ctx, user_options); if (rc_hashes_init_stage2 == -1) return -1; /** - * Automatic Optimizers + * load hashes, stage 3, automatic Optimizers */ - hashconfig_general_defaults (hashconfig, hashes, user_options); - - if (hashes->salts_cnt == 1) - hashconfig->opti_type |= OPTI_TYPE_SINGLE_SALT; - - if (hashes->digests_cnt == 1) - hashconfig->opti_type |= OPTI_TYPE_SINGLE_HASH; + const int rc_hashes_init_stage3 = hashes_init_stage3 (hashes, hashconfig, user_options); - if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) - hashconfig->opti_type |= OPTI_TYPE_NOT_ITERATED; + if (rc_hashes_init_stage3 == -1) return -1; - if (user_options->attack_mode == ATTACK_MODE_BF) - hashconfig->opti_type |= OPTI_TYPE_BRUTE_FORCE; - - if (hashconfig->opti_type & OPTI_TYPE_BRUTE_FORCE) - { - if (hashconfig->opti_type & OPTI_TYPE_SINGLE_HASH) - { - if (hashconfig->opti_type & OPTI_TYPE_APPENDED_SALT) - { - if (hashconfig->opts_type & OPTS_TYPE_ST_ADD80) - { - hashconfig->opts_type &= ~OPTS_TYPE_ST_ADD80; - hashconfig->opts_type |= OPTS_TYPE_PT_ADD80; - } - - if (hashconfig->opts_type & OPTS_TYPE_ST_ADDBITS14) - { - hashconfig->opts_type &= ~OPTS_TYPE_ST_ADDBITS14; - hashconfig->opts_type |= OPTS_TYPE_PT_ADDBITS14; - } - - if (hashconfig->opts_type & OPTS_TYPE_ST_ADDBITS15) - { - hashconfig->opts_type &= ~OPTS_TYPE_ST_ADDBITS15; - hashconfig->opts_type |= OPTS_TYPE_PT_ADDBITS15; - } - } - } - } + hashes_logger (hashes, logfile_ctx); /** * bitmaps @@ -2792,9 +2677,7 @@ int main (int argc, char **argv) rd->dictpos = dictpos; - char *subid = logfile_generate_subid (); - - data.subid = subid; + logfile_generate_subid (logfile_ctx); logfile_sub_msg ("START"); @@ -3536,8 +3419,6 @@ int main (int argc, char **argv) logfile_sub_msg ("STOP"); - global_free (subid); - // finalize task if (opencl_ctx->run_main_level3 == false) break; @@ -3873,6 +3754,8 @@ int main (int argc, char **argv) logfile_top_msg ("STOP"); + logfile_destroy (logfile_ctx); + if (user_options->quiet == false) log_info_nn ("Started: %s", ctime (&proc_start)); if (user_options->quiet == false) log_info_nn ("Stopped: %s", ctime (&proc_stop)); diff --git a/src/logfile.c b/src/logfile.c index c5b8769b5..05a4fc64b 100644 --- a/src/logfile.c +++ b/src/logfile.c @@ -9,55 +9,43 @@ #include "common.h" #include "types.h" -#include "interface.h" -#include "timer.h" -#include "ext_OpenCL.h" -#include "ext_ADL.h" -#include "ext_nvapi.h" -#include "ext_nvml.h" -#include "ext_xnvctrl.h" #include "memory.h" -#include "rp_cpu.h" -#include "mpsp.h" -#include "tuningdb.h" -#include "thread.h" -#include "opencl.h" -#include "hwmon.h" -#include "restore.h" -#include "hash_management.h" -#include "outfile.h" -#include "potfile.h" -#include "debugfile.h" -#include "loopback.h" -#include "data.h" #include "logfile.h" -extern hc_global_data_t data; +static int logfile_generate_id () +{ + const int n = rand (); + + time_t t; + + time (&t); -static FILE *logfile_open (char *logfile) + return t + n; +} + +void logfile_generate_topid (logfile_ctx_t *logfile_ctx) { - FILE *fp = fopen (logfile, "ab"); + if (logfile_ctx->enabled == false) return; - if (fp == NULL) - { - fp = stdout; - } + const int id = logfile_generate_id (); - return fp; + snprintf (logfile_ctx->topid, 1 + 16, "TOP%08x", id); } -static void logfile_close (FILE *fp) +void logfile_generate_subid (logfile_ctx_t *logfile_ctx) { - if (fp == stdout) return; + if (logfile_ctx->enabled == false) return; - fclose (fp); + const int id = logfile_generate_id (); + + snprintf (logfile_ctx->subid, 1 + 16, "SUB%08x", id); } -void logfile_append (const user_options_t *user_options, const char *fmt, ...) +void logfile_append (const logfile_ctx_t *logfile_ctx, const char *fmt, ...) { - if (user_options->logfile_disable == true) return; + if (logfile_ctx->enabled == false) return; - FILE *fp = logfile_open (data.logfile); + FILE *fp = fopen (logfile_ctx->logfile, "ab"); va_list ap; @@ -71,38 +59,30 @@ void logfile_append (const user_options_t *user_options, const char *fmt, ...) fflush (fp); - logfile_close (fp); + fclose (fp); } -static int logfile_generate_id () +void logfile_init (logfile_ctx_t *logfile_ctx, const user_options_t *user_options, const folder_config_t *folder_config) { - const int n = rand (); - - time_t t; - - time (&t); - - return t + n; -} + if (user_options->logfile_disable == true) return; -char *logfile_generate_topid () -{ - const int id = logfile_generate_id (); + logfile_ctx->logfile = (char *) mymalloc (HCBUFSIZ_TINY); - char *topid = (char *) mymalloc (1 + 16 + 1); + snprintf (logfile_ctx->logfile, HCBUFSIZ_TINY - 1, "%s/%s.log", folder_config->session_dir, user_options->session); - snprintf (topid, 1 + 16, "TOP%08x", id); + logfile_ctx->subid = (char *) mymalloc (HCBUFSIZ_TINY); + logfile_ctx->topid = (char *) mymalloc (HCBUFSIZ_TINY); - return topid; + logfile_ctx->enabled = true; } -char *logfile_generate_subid () +void logfile_destroy (logfile_ctx_t *logfile_ctx) { - const int id = logfile_generate_id (); - - char *subid = (char *) mymalloc (1 + 16 + 1); + if (logfile_ctx->enabled == false) return; - snprintf (subid, 1 + 16, "SUB%08x", id); + myfree (logfile_ctx->logfile); + myfree (logfile_ctx->topid); + myfree (logfile_ctx->subid); - return subid; + myfree (logfile_ctx); } diff --git a/src/user_options.c b/src/user_options.c index ba3b199b8..410ff8df8 100644 --- a/src/user_options.c +++ b/src/user_options.c @@ -7,6 +7,7 @@ #include "types.h" #include "memory.h" #include "logging.h" +#include "logfile.h" #include "interface.h" #include "shared.h" #include "usage.h" @@ -872,3 +873,88 @@ int user_options_extra_init (user_options_t *user_options, int myargc, char **my return 0; } + +void user_options_logger (const user_options_t *user_options, const logfile_ctx_t *logfile_ctx) +{ + logfile_top_uint (user_options->benchmark); + logfile_top_uint (user_options->force); + logfile_top_uint (user_options->gpu_temp_disable); + logfile_top_uint (user_options->hex_charset); + logfile_top_uint (user_options->hex_salt); + logfile_top_uint (user_options->hex_wordlist); + logfile_top_uint (user_options->increment); + logfile_top_uint (user_options->keyspace); + logfile_top_uint (user_options->left); + logfile_top_uint (user_options->logfile_disable); + logfile_top_uint (user_options->loopback); + logfile_top_uint (user_options->machine_readable); + logfile_top_uint (user_options->markov_classic); + logfile_top_uint (user_options->markov_disable); + logfile_top_uint (user_options->opencl_info); + logfile_top_uint (user_options->outfile_autohex); + logfile_top_uint (user_options->potfile_disable); + logfile_top_uint (user_options->powertune_enable); + logfile_top_uint (user_options->quiet); + logfile_top_uint (user_options->remove); + logfile_top_uint (user_options->restore); + logfile_top_uint (user_options->restore_disable); + logfile_top_uint (user_options->show); + logfile_top_uint (user_options->status); + logfile_top_uint (user_options->stdout_flag); + logfile_top_uint (user_options->usage); + logfile_top_uint (user_options->username); + logfile_top_uint (user_options->version); + logfile_top_uint (user_options->attack_mode); + logfile_top_uint (user_options->bitmap_max); + logfile_top_uint (user_options->bitmap_min); + logfile_top_uint (user_options->debug_mode); + logfile_top_uint (user_options->gpu_temp_abort); + logfile_top_uint (user_options->gpu_temp_retain); + logfile_top_uint (user_options->hash_mode); + logfile_top_uint (user_options->increment_max); + logfile_top_uint (user_options->increment_min); + logfile_top_uint (user_options->kernel_accel); + logfile_top_uint (user_options->kernel_loops); + logfile_top_uint (user_options->markov_threshold); + logfile_top_uint (user_options->nvidia_spin_damp); + logfile_top_uint (user_options->opencl_vector_width); + logfile_top_uint (user_options->outfile_check_timer); + logfile_top_uint (user_options->outfile_format); + logfile_top_uint (user_options->remove_timer); + logfile_top_uint (user_options->restore_timer); + logfile_top_uint (user_options->rp_files_cnt); + logfile_top_uint (user_options->rp_gen); + logfile_top_uint (user_options->rp_gen_func_max); + logfile_top_uint (user_options->rp_gen_func_min); + logfile_top_uint (user_options->rp_gen_seed); + logfile_top_uint (user_options->runtime); + logfile_top_uint (user_options->scrypt_tmto); + logfile_top_uint (user_options->segment_size); + logfile_top_uint (user_options->status_timer); + logfile_top_uint (user_options->veracrypt_pim); + logfile_top_uint (user_options->weak_hash_threshold); + logfile_top_uint (user_options->workload_profile); + logfile_top_uint64 (user_options->limit); + logfile_top_uint64 (user_options->skip); + logfile_top_string (user_options->cpu_affinity); + logfile_top_string (user_options->custom_charset_1); + logfile_top_string (user_options->custom_charset_2); + logfile_top_string (user_options->custom_charset_3); + logfile_top_string (user_options->custom_charset_4); + logfile_top_string (user_options->debug_file); + logfile_top_string (user_options->induction_dir); + logfile_top_string (user_options->markov_hcstat); + logfile_top_string (user_options->opencl_devices); + logfile_top_string (user_options->opencl_device_types); + logfile_top_string (user_options->opencl_platforms); + logfile_top_string (user_options->outfile); + logfile_top_string (user_options->outfile_check_dir); + logfile_top_string (user_options->potfile_path); + logfile_top_string (user_options->rp_files[0]); + logfile_top_string (user_options->rule_buf_l); + logfile_top_string (user_options->rule_buf_r); + logfile_top_char (user_options->separator); + logfile_top_string (user_options->session); + logfile_top_string (user_options->truecrypt_keyfiles); + logfile_top_string (user_options->veracrypt_keyfiles); +}