1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-26 16:38:35 +00:00

Rewrote logfile handling from scratch

This commit is contained in:
jsteube 2016-09-23 21:41:05 +02:00
parent 7d9ff152b0
commit 0a330d4335
8 changed files with 246 additions and 227 deletions

View File

@ -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

View File

@ -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 user_options_t *user_options, const char *fmt, ...);
void logfile_append (const logfile_ctx_t *logfile_ctx, 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

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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);
const int rc_hashes_init_stage3 = hashes_init_stage3 (hashes, hashconfig, user_options);
if (hashes->salts_cnt == 1)
hashconfig->opti_type |= OPTI_TYPE_SINGLE_SALT;
if (rc_hashes_init_stage3 == -1) return -1;
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;
}
}
}
}
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));

View File

@ -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 FILE *logfile_open (char *logfile)
static int logfile_generate_id ()
{
FILE *fp = fopen (logfile, "ab");
const int n = rand ();
if (fp == NULL)
{
fp = stdout;
}
time_t t;
return fp;
time (&t);
return t + n;
}
static void logfile_close (FILE *fp)
void logfile_generate_topid (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->topid, 1 + 16, "TOP%08x", id);
}
void logfile_append (const user_options_t *user_options, const char *fmt, ...)
void logfile_generate_subid (logfile_ctx_t *logfile_ctx)
{
if (user_options->logfile_disable == true) return;
if (logfile_ctx->enabled == false) return;
FILE *fp = logfile_open (data.logfile);
const int id = logfile_generate_id ();
snprintf (logfile_ctx->subid, 1 + 16, "SUB%08x", id);
}
void logfile_append (const logfile_ctx_t *logfile_ctx, const char *fmt, ...)
{
if (logfile_ctx->enabled == false) return;
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 ();
if (user_options->logfile_disable == true) return;
time_t t;
logfile_ctx->logfile = (char *) mymalloc (HCBUFSIZ_TINY);
time (&t);
snprintf (logfile_ctx->logfile, HCBUFSIZ_TINY - 1, "%s/%s.log", folder_config->session_dir, user_options->session);
return t + n;
logfile_ctx->subid = (char *) mymalloc (HCBUFSIZ_TINY);
logfile_ctx->topid = (char *) mymalloc (HCBUFSIZ_TINY);
logfile_ctx->enabled = true;
}
char *logfile_generate_topid ()
void logfile_destroy (logfile_ctx_t *logfile_ctx)
{
const int id = logfile_generate_id ();
if (logfile_ctx->enabled == false) return;
char *topid = (char *) mymalloc (1 + 16 + 1);
myfree (logfile_ctx->logfile);
myfree (logfile_ctx->topid);
myfree (logfile_ctx->subid);
snprintf (topid, 1 + 16, "TOP%08x", id);
return topid;
}
char *logfile_generate_subid ()
{
const int id = logfile_generate_id ();
char *subid = (char *) mymalloc (1 + 16 + 1);
snprintf (subid, 1 + 16, "SUB%08x", id);
return subid;
myfree (logfile_ctx);
}

View File

@ -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);
}