Fixes for variables and arguments diplay in disasm (#3561)
* Remove ConsoleTheme from disasm.c * Add `rz_core_analysis_var_to_string()` API method * Avoid variable overriding arguments * Fix tests
This commit is contained in:
parent
099439fcb3
commit
6f3969f8c0
12 changed files with 442 additions and 335 deletions
11
librz/analysis/analysis_private.h
Normal file
11
librz/analysis/analysis_private.h
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
// SPDX-FileCopyrightText: 2023 billow <billow.fun@gmail.com>
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
#ifndef RZ_ANALYSIS_PRIVATE_H
|
||||
#define RZ_ANALYSIS_PRIVATE_H
|
||||
|
||||
#include <rz_analysis.h>
|
||||
|
||||
RZ_IPI RZ_BORROW RzAnalysisVar *rz_analysis_function_add_var_dwarf(RzAnalysisFunction *fcn, RZ_OWN RzAnalysisVar *var, int size);
|
||||
|
||||
#endif // RZ_ANALYSIS_PRIVATE_H
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
#include <rz_analysis.h>
|
||||
#include <rz_bin_dwarf.h>
|
||||
#include <string.h>
|
||||
#include "analysis_private.h"
|
||||
|
||||
typedef struct dwarf_parse_context_t {
|
||||
const RzAnalysis *analysis;
|
||||
|
|
@ -1700,7 +1701,6 @@ static bool apply_debuginfo_variable(FcnVariableCtx *ctx, const char *var_name,
|
|||
offset = strtol(extra, NULL, 10);
|
||||
}
|
||||
|
||||
bool ret = false;
|
||||
if (*kind == 'g') { /* global, fixed addr TODO add size to variables? */
|
||||
char *global_name = rz_str_newf("global_%s", var_name);
|
||||
rz_flag_unset_off(ctx->flags, offset);
|
||||
|
|
@ -1712,9 +1712,6 @@ static bool apply_debuginfo_variable(FcnVariableCtx *ctx, const char *var_name,
|
|||
}
|
||||
RzAnalysisVar var;
|
||||
memset(&var, 0, sizeof(RzAnalysisVar));
|
||||
var.name = strdup(var_name);
|
||||
var.type = ttype;
|
||||
var.kind = (RzAnalysisVarKind)var_kind;
|
||||
if (*kind == 'r') {
|
||||
RzRegItem *i = rz_reg_get(ctx->analysis->reg, extra, -1);
|
||||
if (!i) {
|
||||
|
|
@ -1728,12 +1725,16 @@ static bool apply_debuginfo_variable(FcnVariableCtx *ctx, const char *var_name,
|
|||
}
|
||||
rz_analysis_var_storage_init_stack(&var.storage, addr);
|
||||
}
|
||||
rz_analysis_function_add_var(ctx->fcn, &var, 4);
|
||||
ret = true;
|
||||
var.type = ttype;
|
||||
var.kind = var_kind;
|
||||
var.name = rz_str_new(var_name);
|
||||
var.fcn = ctx->fcn;
|
||||
rz_analysis_function_add_var_dwarf(ctx->fcn, &var, 4);
|
||||
}
|
||||
return true;
|
||||
beach:
|
||||
rz_type_free(ttype);
|
||||
return ret;
|
||||
return false;
|
||||
}
|
||||
|
||||
static void apply_debuginfo_variables(FcnVariableCtx *ctx, RzAnalysisVarKind kind) {
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_set_var(RzAnalysisFunction
|
|||
RzAnalysisVar *var = rz_analysis_function_get_var_byname(fcn, name);
|
||||
if (var && !storage_equals(&var->storage, stor)) {
|
||||
// var name already exists at a different kind+delta
|
||||
RZ_LOG_WARN("var name %s already exists at a different kind+delta", name);
|
||||
RZ_LOG_WARN("var name %s already exists at a different kind+delta\n", name);
|
||||
return NULL;
|
||||
}
|
||||
var = rz_analysis_function_get_var_at(fcn, stor);
|
||||
|
|
@ -151,21 +151,57 @@ RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_set_var(RzAnalysisFunction
|
|||
}
|
||||
|
||||
/**
|
||||
* Add or update a variable \p var to the given function \p fcn.
|
||||
* \brief Add or update a variable \p var to the given function \p fcn.
|
||||
*
|
||||
* For the variable information in DWARF, there may be some variables whose location information is the same
|
||||
* but other information may be completely different.
|
||||
* The current approach to this situation is to add all FORMAL_PARAMETER variables first, and then add the others
|
||||
* but don't overwrite any already added variables from DWARF. This assumes that for all FORMAL_PARAMETER variables
|
||||
* of a function, there is no overlap in their locations.
|
||||
*
|
||||
* \param fcn the function which the variable will belong to
|
||||
* \param var the variable to add or update
|
||||
* \param size \p var's type size
|
||||
* \return the created or updated variable, or NULL if the operation could not be completed
|
||||
*/
|
||||
RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_add_var(RzAnalysisFunction *fcn, RZ_OWN RzAnalysisVar *var,
|
||||
RZ_IPI RZ_BORROW RzAnalysisVar *rz_analysis_function_add_var_dwarf(RzAnalysisFunction *fcn, RZ_OWN RzAnalysisVar *var,
|
||||
int size) {
|
||||
rz_return_val_if_fail(fcn && var && var->name, NULL);
|
||||
RzAnalysisVar *p_var = rz_analysis_function_set_var(fcn, &var->storage, var->type, size, var->name);
|
||||
if (p_var) {
|
||||
p_var->kind = var->kind;
|
||||
RzAnalysisVar *old = NULL;
|
||||
void **it;
|
||||
rz_pvector_foreach (&fcn->vars, it) {
|
||||
RzAnalysisVar *p = *it;
|
||||
if (!strcmp(p->name, var->name) || storage_equals(&p->storage, &var->storage)) {
|
||||
old = p;
|
||||
}
|
||||
}
|
||||
return p_var;
|
||||
if (old) {
|
||||
if (old->kind != RZ_ANALYSIS_VAR_KIND_INVALID) {
|
||||
return NULL;
|
||||
}
|
||||
rz_analysis_var_delete(old);
|
||||
}
|
||||
|
||||
RzAnalysisVar *out = rz_analysis_var_new();
|
||||
out->fcn = fcn;
|
||||
rz_pvector_push(&fcn->vars, out);
|
||||
|
||||
out->name = var->name;
|
||||
out->storage = var->storage;
|
||||
out->kind = var->kind;
|
||||
storage_poolify(fcn->analysis, &out->storage);
|
||||
if (var->type) {
|
||||
if (out->type != var->type) {
|
||||
rz_type_free(out->type);
|
||||
out->type = rz_type_clone(var->type);
|
||||
}
|
||||
} else {
|
||||
if (!out->type) {
|
||||
out->type = var_type_default(fcn->analysis, size);
|
||||
}
|
||||
}
|
||||
rz_analysis_var_resolve_overlaps(out);
|
||||
return out;
|
||||
}
|
||||
|
||||
RZ_API void rz_analysis_var_set_type(RzAnalysisVar *var, RZ_OWN RzType *type, bool resolve_overlaps) {
|
||||
|
|
|
|||
|
|
@ -6466,3 +6466,49 @@ finish:
|
|||
rz_cons_break_pop();
|
||||
RZ_FREE(debugger);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Get string representation of RzAnalysisVar.
|
||||
*
|
||||
* \param core RzCore instance
|
||||
* \param var RzAnalysisVar to be converted to string
|
||||
*/
|
||||
RZ_API RZ_OWN char *rz_core_analysis_var_to_string(RZ_NONNULL RzCore *core, RZ_NONNULL RzAnalysisVar *var) {
|
||||
RzStrBuf *sb = rz_strbuf_new(NULL);
|
||||
if (!sb) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool color = rz_config_get_b(core->config, "scr.color");
|
||||
bool color_arg = color && rz_config_get_b(core->config, "scr.color.args");
|
||||
RzConsPrintablePalette *pal = &core->cons->context->pal;
|
||||
|
||||
const char *pfx = rz_analysis_var_is_arg(var) ? "arg" : "var";
|
||||
char *constr = rz_analysis_var_get_constraints_readable(var);
|
||||
char *vartype = rz_type_as_string(core->analysis->typedb, var->type);
|
||||
rz_strbuf_appendf(sb, "%s%s %s%s%s%s %s%s%s%s@ ",
|
||||
color_arg ? pal->func_var : "", pfx,
|
||||
color_arg ? pal->func_var_type : "", vartype,
|
||||
rz_str_endswith(vartype, "*") ? "" : " ",
|
||||
var->name,
|
||||
color_arg ? pal->func_var_addr : "",
|
||||
constr ? " { " : "",
|
||||
constr ? constr : "",
|
||||
constr ? "} " : "");
|
||||
free(vartype);
|
||||
free(constr);
|
||||
|
||||
switch (var->storage.type) {
|
||||
case RZ_ANALYSIS_VAR_STORAGE_REG: {
|
||||
rz_strbuf_append(sb, var->storage.reg);
|
||||
break;
|
||||
}
|
||||
case RZ_ANALYSIS_VAR_STORAGE_STACK: {
|
||||
const RzStackAddr off = var->storage.stack_off;
|
||||
const char sign = off >= 0 ? '+' : '-';
|
||||
rz_strbuf_appendf(sb, "stack %c 0x%" PFMT64x, sign, RZ_ABS(off));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return rz_strbuf_drain(sb);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2506,7 +2506,7 @@ static int var_comparator(const RzAnalysisVar *a, const RzAnalysisVar *b) {
|
|||
}
|
||||
}
|
||||
|
||||
static void core_analysis_var_list_show(RzAnalysis *analysis, RzAnalysisFunction *fcn, RzAnalysisVarStorageType kind, RzCmdStateOutput *state) {
|
||||
static void core_analysis_var_list_show(RzCore *core, RzAnalysisFunction *fcn, RzAnalysisVarStorageType kind, RzCmdStateOutput *state) {
|
||||
RzAnalysisVar *var;
|
||||
RzListIter *iter;
|
||||
if (state->mode == RZ_OUTPUT_MODE_JSON) {
|
||||
|
|
@ -2524,7 +2524,7 @@ static void core_analysis_var_list_show(RzAnalysis *analysis, RzAnalysisFunction
|
|||
switch (state->mode) {
|
||||
case RZ_OUTPUT_MODE_RIZIN: {
|
||||
// we can't express all type info here :(
|
||||
char *vartype = rz_type_as_string(analysis->typedb, var->type);
|
||||
char *vartype = rz_type_as_string(core->analysis->typedb, var->type);
|
||||
switch (kind) {
|
||||
case RZ_ANALYSIS_VAR_STORAGE_REG:
|
||||
rz_cons_printf("afvr %s %s %s @ 0x%" PFMT64x "\n",
|
||||
|
|
@ -2543,7 +2543,7 @@ static void core_analysis_var_list_show(RzAnalysis *analysis, RzAnalysisFunction
|
|||
break;
|
||||
}
|
||||
case RZ_OUTPUT_MODE_JSON: {
|
||||
char *vartype = rz_type_as_string(analysis->typedb, var->type);
|
||||
char *vartype = rz_type_as_string(core->analysis->typedb, var->type);
|
||||
pj_o(state->d.pj);
|
||||
pj_ks(state->d.pj, "name", var->name);
|
||||
pj_kb(state->d.pj, "arg", rz_analysis_var_is_arg(var));
|
||||
|
|
@ -2568,25 +2568,14 @@ static void core_analysis_var_list_show(RzAnalysis *analysis, RzAnalysisFunction
|
|||
free(vartype);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
switch (kind) {
|
||||
case RZ_ANALYSIS_VAR_STORAGE_STACK: {
|
||||
st64 delta = var->storage.stack_off;
|
||||
char *vartype = rz_type_as_string(analysis->typedb, var->type);
|
||||
char sign = delta < 0 ? '-' : '+';
|
||||
rz_cons_printf("%s %s %s @ stack %c 0x%" PFMT64x "\n",
|
||||
rz_analysis_var_is_arg(var) ? "arg" : "var",
|
||||
vartype, var->name,
|
||||
sign, RZ_ABS(delta));
|
||||
free(vartype);
|
||||
} break;
|
||||
case RZ_ANALYSIS_VAR_STORAGE_REG: {
|
||||
char *vartype = rz_type_as_string(analysis->typedb, var->type);
|
||||
rz_cons_printf("arg %s %s @ %s\n", vartype, var->name, var->storage.reg);
|
||||
free(vartype);
|
||||
} break;
|
||||
default: {
|
||||
char *s = rz_core_analysis_var_to_string(core, var);
|
||||
if (s) {
|
||||
rz_cons_println(s);
|
||||
free(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fail:
|
||||
if (state->mode == RZ_OUTPUT_MODE_JSON) {
|
||||
|
|
@ -2604,8 +2593,8 @@ RZ_IPI RzCmdStatus rz_analysis_function_vars_handler(RzCore *core, int argc, con
|
|||
const char *bp = NULL;
|
||||
switch (state->mode) {
|
||||
case RZ_OUTPUT_MODE_STANDARD:
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
break;
|
||||
case RZ_OUTPUT_MODE_RIZIN: {
|
||||
bp = rz_reg_get_name(core->analysis->reg, RZ_REG_NAME_BP);
|
||||
|
|
@ -2624,9 +2613,9 @@ RZ_IPI RzCmdStatus rz_analysis_function_vars_handler(RzCore *core, int argc, con
|
|||
case RZ_OUTPUT_MODE_JSON:
|
||||
pj_o(state->d.pj);
|
||||
pj_k(state->d.pj, "stack");
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
pj_k(state->d.pj, "reg");
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
pj_end(state->d.pj);
|
||||
break;
|
||||
default:
|
||||
|
|
@ -2873,7 +2862,7 @@ RZ_IPI RzCmdStatus rz_analysis_function_vars_xrefs_vars_handler(RzCore *core, in
|
|||
}
|
||||
|
||||
static RzCmdStatus analysis_function_vars_kind_list(RzCore *core, RzAnalysisFunction *fcn, RzAnalysisVarStorageType kind, RzCmdStateOutput *state) {
|
||||
core_analysis_var_list_show(core->analysis, fcn, kind, state);
|
||||
core_analysis_var_list_show(core, fcn, kind, state);
|
||||
return RZ_CMD_STATUS_OK;
|
||||
}
|
||||
|
||||
|
|
@ -3583,8 +3572,8 @@ static void function_list_print_as_cmd(RzCore *core, RzList /*<RzAnalysisFunctio
|
|||
rz_cons_printf("afc %s @ 0x%08" PFMT64x "\n", fcn->cc ? fcn->cc : defaultCC, fcn->addr);
|
||||
}
|
||||
/* show variables and arguments */
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
/* Show references */
|
||||
RzList *xrefs = rz_analysis_function_get_xrefs_from(fcn);
|
||||
xref_list_print_as_cmd(core, xrefs);
|
||||
|
|
@ -3692,9 +3681,9 @@ static void function_print_to_json(RzCore *core, RzAnalysisFunction *fcn, RzCmdS
|
|||
pj_kn(state->d.pj, "nargs", rz_analysis_arg_count(fcn));
|
||||
|
||||
pj_k(state->d.pj, "stackvars");
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
pj_k(state->d.pj, "regvars");
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
}
|
||||
pj_end(state->d.pj);
|
||||
}
|
||||
|
|
@ -3968,8 +3957,8 @@ static void fcn_print_info(RzCore *core, RzAnalysisFunction *fcn, RzCmdStateOutp
|
|||
ut32 var_count = rz_analysis_var_local_count(fcn);
|
||||
|
||||
rz_cons_printf("locals: %u\nargs: %u\n", var_count, args_count);
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
core_analysis_var_list_show(core->analysis, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_REG, state);
|
||||
core_analysis_var_list_show(core, fcn, RZ_ANALYSIS_VAR_STORAGE_STACK, state);
|
||||
}
|
||||
|
||||
// traced
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
#define DEFAULT_NARGS 4
|
||||
#define FLAG_PREFIX ";-- "
|
||||
|
||||
#define COLOR(ds, field) ((ds)->show_color ? (ds)->theme.field : "")
|
||||
#define COLOR_ARG(ds, field) ((ds)->show_color && (ds)->show_color_args ? (ds)->theme.field : "")
|
||||
#define COLOR(ds, field) ((ds)->show_color ? (ds)->core->cons->context->pal.field : "")
|
||||
#define COLOR_ARG(ds, field) ((ds)->show_color && (ds)->show_color_args ? (ds)->core->cons->context->pal.field : "")
|
||||
#define COLOR_CONST(ds, color) ((ds)->show_color ? Color_##color : "")
|
||||
#define COLOR_RESET(ds) COLOR_CONST(ds, RESET)
|
||||
|
||||
|
|
@ -76,47 +76,6 @@ static const char *rz_vline_uc[] = {
|
|||
"@", // SELF_LOOP
|
||||
};
|
||||
|
||||
typedef struct console_theme_t {
|
||||
const char *pal_comment;
|
||||
const char *comment;
|
||||
const char *usrcmt;
|
||||
const char *fname;
|
||||
const char *floc;
|
||||
const char *fline;
|
||||
const char *flow;
|
||||
const char *flow2;
|
||||
const char *flag;
|
||||
const char *label;
|
||||
const char *offset;
|
||||
const char *other;
|
||||
const char *nop;
|
||||
const char *bin;
|
||||
const char *math;
|
||||
const char *btext;
|
||||
const char *jmp;
|
||||
const char *cjmp;
|
||||
const char *call;
|
||||
const char *cmp;
|
||||
const char *swi;
|
||||
const char *trap;
|
||||
const char *ret;
|
||||
const char *push;
|
||||
const char *pop;
|
||||
const char *reg;
|
||||
const char *num;
|
||||
const char *mov;
|
||||
const char *invalid;
|
||||
const char *gui_cflow;
|
||||
const char *gui_dataoffset;
|
||||
const char *gui_background;
|
||||
const char *gui_alt_background;
|
||||
const char *gui_border;
|
||||
const char *linehl;
|
||||
const char *func_var;
|
||||
const char *func_var_type;
|
||||
const char *func_var_addr;
|
||||
} ConsoleTheme;
|
||||
|
||||
#define DS_PRE_NONE 0
|
||||
#define DS_PRE_EMPTY 1
|
||||
#define DS_PRE_FCN_HEAD 2
|
||||
|
|
@ -251,7 +210,6 @@ typedef struct {
|
|||
bool midcursor;
|
||||
bool show_noisy_comments;
|
||||
ut64 asm_highlight;
|
||||
ConsoleTheme theme;
|
||||
|
||||
RzFlagItem *lastflag;
|
||||
RzAnalysisHint *hint;
|
||||
|
|
@ -378,85 +336,6 @@ static void ds_start_line_highlight(RzDisasmState *ds);
|
|||
static void ds_end_line_highlight(RzDisasmState *ds);
|
||||
static bool line_highlighted(RzDisasmState *ds);
|
||||
static int ds_print_shortcut(RzDisasmState *ds, ut64 addr, int pos);
|
||||
static inline void ds_init_theme(RzDisasmState *ds) {
|
||||
RzCore *core = ds->core;
|
||||
ds->theme.pal_comment = core->cons->context->pal.comment;
|
||||
#define P(x) (core->cons && core->cons->context->pal.x) ? core->cons->context->pal.x
|
||||
ds->theme.comment = P(comment)
|
||||
: Color_CYAN;
|
||||
ds->theme.usrcmt = P(usercomment)
|
||||
: Color_CYAN;
|
||||
ds->theme.fname = P(fname)
|
||||
: Color_RED;
|
||||
ds->theme.floc = P(floc)
|
||||
: Color_MAGENTA;
|
||||
ds->theme.fline = P(fline)
|
||||
: Color_CYAN;
|
||||
ds->theme.flow = P(flow)
|
||||
: Color_CYAN;
|
||||
ds->theme.flow2 = P(flow2)
|
||||
: Color_BLUE;
|
||||
ds->theme.flag = P(flag)
|
||||
: Color_CYAN;
|
||||
ds->theme.label = P(label)
|
||||
: Color_CYAN;
|
||||
ds->theme.offset = P(offset)
|
||||
: Color_GREEN;
|
||||
ds->theme.other = P(other)
|
||||
: Color_WHITE;
|
||||
ds->theme.nop = P(nop)
|
||||
: Color_BLUE;
|
||||
ds->theme.bin = P(bin)
|
||||
: Color_YELLOW;
|
||||
ds->theme.math = P(math)
|
||||
: Color_YELLOW;
|
||||
ds->theme.btext = P(btext)
|
||||
: Color_YELLOW;
|
||||
ds->theme.jmp = P(jmp)
|
||||
: Color_GREEN;
|
||||
ds->theme.cjmp = P(cjmp)
|
||||
: Color_GREEN;
|
||||
ds->theme.call = P(call)
|
||||
: Color_BGREEN;
|
||||
ds->theme.cmp = P(cmp)
|
||||
: Color_MAGENTA;
|
||||
ds->theme.swi = P(swi)
|
||||
: Color_MAGENTA;
|
||||
ds->theme.trap = P(trap)
|
||||
: Color_BRED;
|
||||
ds->theme.ret = P(ret)
|
||||
: Color_RED;
|
||||
ds->theme.push = P(push)
|
||||
: Color_YELLOW;
|
||||
ds->theme.pop = P(pop)
|
||||
: Color_BYELLOW;
|
||||
ds->theme.reg = P(reg)
|
||||
: Color_YELLOW;
|
||||
ds->theme.num = P(num)
|
||||
: Color_CYAN;
|
||||
ds->theme.mov = P(mov)
|
||||
: Color_WHITE;
|
||||
ds->theme.invalid = P(invalid)
|
||||
: Color_BRED;
|
||||
ds->theme.gui_cflow = P(gui_cflow)
|
||||
: Color_YELLOW;
|
||||
ds->theme.gui_dataoffset = P(gui_dataoffset)
|
||||
: Color_YELLOW;
|
||||
ds->theme.gui_background = P(gui_background)
|
||||
: Color_BLACK;
|
||||
ds->theme.gui_alt_background = P(gui_alt_background)
|
||||
: Color_GRAY;
|
||||
ds->theme.gui_border = P(gui_border)
|
||||
: Color_BGGRAY;
|
||||
ds->theme.linehl = P(linehl)
|
||||
: Color_BGBLUE;
|
||||
ds->theme.func_var = P(func_var)
|
||||
: Color_WHITE;
|
||||
ds->theme.func_var_type = P(func_var_type)
|
||||
: Color_BLUE;
|
||||
ds->theme.func_var_addr = P(func_var_addr)
|
||||
: Color_CYAN;
|
||||
}
|
||||
|
||||
#define theme_printf(kwd, fmt, ...) rz_cons_printf("%s" fmt "%s", COLOR(ds, kwd), __VA_ARGS__, COLOR_RESET(ds))
|
||||
#define theme_print(kwd, x) \
|
||||
|
|
@ -590,7 +469,7 @@ RZ_API const char *rz_core_get_section_name(RzCore *core, ut64 addr) {
|
|||
// nl if we have to insert new line, it controls whether to insert \n
|
||||
static void _ds_comment_align_(RzDisasmState *ds, bool up, bool nl) {
|
||||
if (ds->show_comment_right) {
|
||||
theme_print_color(pal_comment);
|
||||
theme_print_color(comment);
|
||||
return;
|
||||
}
|
||||
const char *sn = ds->show_section ? rz_core_get_section_name(ds->core, ds->at) : "";
|
||||
|
|
@ -698,10 +577,6 @@ static RzDisasmState *ds_init(RzCore *core) {
|
|||
ds->colorop = rz_config_get_b(core->config, "scr.color.ops"); // XXX confusing name // asm.color.inst (mnemonic + operands) ?
|
||||
ds->show_utf8 = rz_config_get_b(core->config, "scr.utf8");
|
||||
|
||||
if (ds->show_color) {
|
||||
ds_init_theme(ds);
|
||||
}
|
||||
|
||||
ds->immstr = rz_config_get_b(core->config, "asm.imm.str");
|
||||
ds->immtrim = rz_config_get_b(core->config, "asm.imm.trim");
|
||||
ds->use_esil = rz_config_get_b(core->config, "asm.esil");
|
||||
|
|
@ -988,7 +863,7 @@ static bool ds_must_strip(RzDisasmState *ds) {
|
|||
|
||||
static void ds_highlight_word(RzDisasmState *ds, char *word, char *color) {
|
||||
char *source = ds->opstr ? ds->opstr : rz_asm_op_get_asm(&ds->asmop);
|
||||
const char *color_reset = line_highlighted(ds) ? ds->theme.linehl : Color_RESET_BG;
|
||||
const char *color_reset = line_highlighted(ds) ? COLOR(ds, linehl) : Color_RESET_BG;
|
||||
char *asm_str = rz_str_highlight(source, word, color, color_reset);
|
||||
ds->opstr = asm_str ? asm_str : source;
|
||||
}
|
||||
|
|
@ -1427,7 +1302,7 @@ static void ds_show_xrefs(RzDisasmState *ds) {
|
|||
ds_begin_line(ds);
|
||||
ds_pre_xrefs(ds, fcnlines);
|
||||
ds_comment(ds, false, "%s; XREFS(%d)",
|
||||
COLOR(ds, pal_comment),
|
||||
COLOR(ds, comment),
|
||||
rz_list_length(xrefs));
|
||||
ds_print_color_reset(ds);
|
||||
ds_newline(ds);
|
||||
|
|
@ -1441,7 +1316,7 @@ static void ds_show_xrefs(RzDisasmState *ds) {
|
|||
cols = cols > 5 ? 5 : cols;
|
||||
ds_begin_line(ds);
|
||||
ds_pre_xrefs(ds, fcnlines);
|
||||
ds_comment(ds, false, "%s; XREFS: ", COLOR(ds, pal_comment));
|
||||
ds_comment(ds, false, "%s; XREFS: ", COLOR(ds, comment));
|
||||
rz_list_foreach (xrefs, iter, xrefi) {
|
||||
ds_comment(ds, false, "%s 0x%08" PFMT64x " ",
|
||||
rz_analysis_xrefs_type_tostring(xrefi->type), xrefi->from);
|
||||
|
|
@ -1451,7 +1326,7 @@ static void ds_show_xrefs(RzDisasmState *ds) {
|
|||
ds_newline(ds);
|
||||
ds_begin_line(ds);
|
||||
ds_pre_xrefs(ds, fcnlines);
|
||||
ds_comment(ds, false, "%s; XREFS: ", COLOR(ds, pal_comment));
|
||||
ds_comment(ds, false, "%s; XREFS: ", COLOR(ds, comment));
|
||||
}
|
||||
count = 0;
|
||||
} else {
|
||||
|
|
@ -1507,7 +1382,7 @@ static void ds_show_xrefs(RzDisasmState *ds) {
|
|||
const char *plural = rz_list_length(addrs) > 1 ? "S" : "";
|
||||
const char *plus = fun ? "" : "+";
|
||||
ds_comment(ds, false, "%s; %s XREF%s from %s @ ",
|
||||
COLOR(ds, pal_comment), rz_analysis_xrefs_type_tostring(xrefi->type), plural,
|
||||
COLOR(ds, comment), rz_analysis_xrefs_type_tostring(xrefi->type), plural,
|
||||
realname ? realname : name);
|
||||
ut64 *addrptr;
|
||||
rz_list_foreach (addrs, it, addrptr) {
|
||||
|
|
@ -1782,32 +1657,10 @@ static void ds_pre_xrefs(RzDisasmState *ds, bool no_fcnlines) {
|
|||
}
|
||||
|
||||
static void ds_show_function_var(RzDisasmState *ds, RzAnalysisFunction *fcn, RzAnalysisVar *var) {
|
||||
const char *pfx = rz_analysis_var_is_arg(var) ? "arg" : "var";
|
||||
char *constr = rz_analysis_var_get_constraints_readable(var);
|
||||
char *vartype = rz_type_as_string(ds->core->analysis->typedb, var->type);
|
||||
rz_cons_printf("%s%s %s%s%s%s %s%s%s%s@ ",
|
||||
COLOR_ARG(ds, func_var), pfx,
|
||||
COLOR_ARG(ds, func_var_type), vartype,
|
||||
rz_str_endswith(vartype, "*") ? "" : " ",
|
||||
var->name, COLOR_ARG(ds, func_var_addr),
|
||||
constr ? " { " : "",
|
||||
constr ? constr : "",
|
||||
constr ? "} " : "");
|
||||
free(vartype);
|
||||
free(constr);
|
||||
|
||||
theme_print_color(func_var_addr);
|
||||
switch (var->storage.type) {
|
||||
case RZ_ANALYSIS_VAR_STORAGE_REG: {
|
||||
rz_cons_print(var->storage.reg);
|
||||
break;
|
||||
}
|
||||
case RZ_ANALYSIS_VAR_STORAGE_STACK: {
|
||||
const RzStackAddr off = var->storage.stack_off;
|
||||
const char sign = off >= 0 ? '+' : '-';
|
||||
rz_cons_printf("stack %c 0x%" PFMT64x, sign, RZ_ABS(off));
|
||||
break;
|
||||
}
|
||||
char *s = rz_core_analysis_var_to_string(ds->core, var);
|
||||
if (s) {
|
||||
rz_cons_print(s);
|
||||
free(s);
|
||||
}
|
||||
|
||||
if (ds->show_varsum != -1) {
|
||||
|
|
@ -1898,10 +1751,6 @@ static void printVarSummary(RzDisasmState *ds, RzList /*<RzAnalysisVar *>*/ *lis
|
|||
ds_newline(ds);
|
||||
}
|
||||
|
||||
static bool empty_signature(const char *s) {
|
||||
return (s && !strncmp(s, "void ", 5) && strstr(s, "()"));
|
||||
}
|
||||
|
||||
static void ds_show_functions(RzDisasmState *ds) {
|
||||
RzAnalysisFunction *f;
|
||||
RzCore *core = ds->core;
|
||||
|
|
@ -1920,10 +1769,6 @@ static void ds_show_functions(RzDisasmState *ds) {
|
|||
fcn_name = f->name;
|
||||
|
||||
ds_begin_line(ds);
|
||||
char *sign = rz_analysis_function_get_signature(f);
|
||||
if (empty_signature(sign)) {
|
||||
RZ_FREE(sign);
|
||||
}
|
||||
|
||||
RzAnalysisFcnVarsCache vars_cache;
|
||||
rz_analysis_fcn_vars_cache_init(core->analysis, &vars_cache, f);
|
||||
|
|
@ -1997,7 +1842,6 @@ static void ds_show_functions(RzDisasmState *ds) {
|
|||
rz_cons_printf("%s", fcn_name);
|
||||
}
|
||||
ds_newline(ds);
|
||||
RZ_FREE(sign);
|
||||
|
||||
if (ds->show_lines_fcn) {
|
||||
ds->pre = DS_PRE_FCN_MIDDLE;
|
||||
|
|
@ -2172,9 +2016,9 @@ static void ds_show_comments_right(RzDisasmState *ds) {
|
|||
ds->comment = strdup(item->comment);
|
||||
}
|
||||
} else if (vartype) {
|
||||
ds->comment = rz_str_newf("%s; %s %s%s; %s", COLOR_ARG(ds, func_var_type), vartype, COLOR_RESET(ds), COLOR(ds, usrcmt), comment);
|
||||
ds->comment = rz_str_newf("%s; %s %s%s; %s", COLOR_ARG(ds, func_var_type), vartype, COLOR_RESET(ds), COLOR(ds, usercomment), comment);
|
||||
} else {
|
||||
ds->comment = rz_str_newf("%s; %s", COLOR_ARG(ds, usrcmt), comment);
|
||||
ds->comment = rz_str_newf("%s; %s", COLOR_ARG(ds, usercomment), comment);
|
||||
}
|
||||
if (!ds->comment || !*ds->comment) {
|
||||
return;
|
||||
|
|
@ -2194,10 +2038,10 @@ static void ds_show_comments_right(RzDisasmState *ds) {
|
|||
mycols = 0;
|
||||
}
|
||||
mycols /= 2;
|
||||
theme_print_color(pal_comment);
|
||||
theme_print_color(comment);
|
||||
ds_pre_xrefs(ds, false);
|
||||
|
||||
theme_print_color(usrcmt);
|
||||
theme_print_color(usercomment);
|
||||
ds_comment(ds, false, "%s", ds->comment);
|
||||
ds_print_color_reset(ds);
|
||||
|
||||
|
|
@ -2206,7 +2050,7 @@ static void ds_show_comments_right(RzDisasmState *ds) {
|
|||
/* flag one */
|
||||
if (item && item->comment && ds->ocomment != item->comment) {
|
||||
ds_begin_line(ds);
|
||||
theme_print_color(pal_comment);
|
||||
theme_print_color(comment);
|
||||
ds_newline(ds);
|
||||
ds_begin_line(ds);
|
||||
rz_cons_strcat(" ; ");
|
||||
|
|
@ -2243,7 +2087,7 @@ static void __preline_flag(RzDisasmState *ds, RzFlagItem *flag) {
|
|||
}
|
||||
}
|
||||
if (!hasColor) {
|
||||
rz_cons_strcat(ds->theme.flag);
|
||||
rz_cons_strcat(COLOR(ds, flag));
|
||||
}
|
||||
}
|
||||
if (!ds->show_offset) {
|
||||
|
|
@ -2335,7 +2179,7 @@ static void ds_show_flags(RzDisasmState *ds, bool overlapped) {
|
|||
}
|
||||
}
|
||||
if (!hasColor) {
|
||||
rz_cons_strcat(ds->theme.flag);
|
||||
rz_cons_strcat(COLOR(ds, flag));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2403,7 +2247,7 @@ static void ds_show_flags(RzDisasmState *ds, bool overlapped) {
|
|||
}
|
||||
case_prev = case_current;
|
||||
ds_align_comment(ds);
|
||||
rz_cons_printf("%s; from %s", COLOR(ds, pal_comment), addr);
|
||||
rz_cons_printf("%s; from %s", COLOR(ds, comment), addr);
|
||||
outline = false;
|
||||
docolon = false;
|
||||
} else {
|
||||
|
|
@ -2414,7 +2258,7 @@ static void ds_show_flags(RzDisasmState *ds, bool overlapped) {
|
|||
rz_cons_printf(FLAG_PREFIX);
|
||||
if (overlapped) {
|
||||
rz_cons_printf("%s(0x%08" PFMT64x ")%s ", COLOR(ds, offset), ds->at,
|
||||
ds->show_color ? (hasColor ? color : ds->theme.flag) : "");
|
||||
ds->show_color ? (hasColor ? color : COLOR(ds, flag)) : "");
|
||||
}
|
||||
}
|
||||
if (outline) {
|
||||
|
|
@ -2666,7 +2510,7 @@ static void ds_control_flow_comments(RzDisasmState *ds) {
|
|||
case RZ_ANALYSIS_OP_TYPE_CALL:
|
||||
item = rz_flag_get_i(ds->core->flags, ds->analysis_op.jump);
|
||||
if (item && item->comment) {
|
||||
theme_print_color(pal_comment);
|
||||
theme_print_color(comment);
|
||||
ds_align_comment(ds);
|
||||
rz_cons_printf(" ; ref to %s: %s\n", item->name, item->comment);
|
||||
ds_print_color_reset(ds);
|
||||
|
|
@ -2737,7 +2581,7 @@ static void ds_print_lines_left(RzDisasmState *ds) {
|
|||
}
|
||||
}
|
||||
char *sect = str ? str : strdup("");
|
||||
printCol(ds, sect, ds->show_section_col, ds->theme.reg);
|
||||
printCol(ds, sect, ds->show_section_col, COLOR(ds, reg));
|
||||
free(sect);
|
||||
}
|
||||
if (ds->show_symbols) {
|
||||
|
|
@ -2762,7 +2606,7 @@ static void ds_print_lines_left(RzDisasmState *ds) {
|
|||
}
|
||||
{
|
||||
char *str = rz_str_newf("%s + %-4d", name, delta);
|
||||
printCol(ds, str, ds->show_symbols_col, ds->theme.num);
|
||||
printCol(ds, str, ds->show_symbols_col, COLOR(ds, num));
|
||||
free(str);
|
||||
}
|
||||
}
|
||||
|
|
@ -3031,7 +2875,7 @@ static bool ds_print_data_type(RzDisasmState *ds, const ut8 *buf, int ib, int si
|
|||
}
|
||||
}
|
||||
|
||||
rz_cons_strcat(ds->theme.mov);
|
||||
rz_cons_strcat(COLOR(ds, mov));
|
||||
switch (ib) {
|
||||
case 1:
|
||||
rz_str_bits(msg, buf, size * 8, NULL);
|
||||
|
|
@ -3423,7 +3267,7 @@ static int ds_print_middle(RzDisasmState *ds, int ret) {
|
|||
if (ds->middle != 0) {
|
||||
ret -= ds->middle;
|
||||
ds_align_comment(ds);
|
||||
theme_printf(pal_comment, " ; *middle* %d", ret);
|
||||
theme_printf(comment, " ; *middle* %d", ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -3542,7 +3386,7 @@ static int ds_print_shortcut(RzDisasmState *ds, ut64 addr, int pos) {
|
|||
if (ds->asm_hint_pos == -1) {
|
||||
ch = " ";
|
||||
}
|
||||
theme_print_color(pal_comment);
|
||||
theme_print_color(comment);
|
||||
if (*ch) {
|
||||
slen++;
|
||||
}
|
||||
|
|
@ -3732,7 +3576,7 @@ static void ds_begin_nl_comment(RzDisasmState *ds) {
|
|||
ds_pre_xrefs(ds, false);
|
||||
}
|
||||
if (ds->show_color && (ds->cmtcount > 0 || ds->show_comment_right)) {
|
||||
theme_print_color(pal_comment);
|
||||
theme_print_color(comment);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3784,7 +3628,7 @@ static void ds_print_debuginfo(RzDisasmState *ds) {
|
|||
return;
|
||||
}
|
||||
ds_align_comment(ds);
|
||||
theme_printf(pal_comment, "; %s", line);
|
||||
theme_printf(comment, "; %s", line);
|
||||
free(ds->osl);
|
||||
ds->osl = ds->sl;
|
||||
ds->sl = NULL;
|
||||
|
|
@ -4684,7 +4528,7 @@ static void ds_print_esil_analysis(RzDisasmState *ds) {
|
|||
if (!can_emulate_metadata(core, at)) {
|
||||
goto beach;
|
||||
}
|
||||
theme_print_color(pal_comment);
|
||||
theme_print_color(comment);
|
||||
esil = core->analysis->esil;
|
||||
pc = rz_reg_get_name(core->analysis->reg, RZ_REG_NAME_PC);
|
||||
if (pc) {
|
||||
|
|
@ -4780,7 +4624,7 @@ static void ds_print_esil_analysis(RzDisasmState *ds) {
|
|||
// remove other comments
|
||||
delete_last_comment(ds);
|
||||
// ds_comment_start (ds, "");
|
||||
ds_comment_esil(ds, true, false, "%s", COLOR(ds, pal_comment));
|
||||
ds_comment_esil(ds, true, false, "%s", COLOR(ds, comment));
|
||||
char *fcn_type_str = NULL;
|
||||
if (fcn_type) {
|
||||
fcn_type_str = rz_type_as_string(core->analysis->typedb, fcn_type);
|
||||
|
|
@ -4842,7 +4686,7 @@ static void ds_print_esil_analysis(RzDisasmState *ds) {
|
|||
nargs = rz_analysis_arg_count(fcn);
|
||||
}
|
||||
if (nargs > 0) {
|
||||
ds_comment_esil(ds, true, false, "%s", COLOR(ds, pal_comment));
|
||||
ds_comment_esil(ds, true, false, "%s", COLOR(ds, comment));
|
||||
if (fcn_name) {
|
||||
ds_comment_middle(ds, "; %s(", fcn_name);
|
||||
} else {
|
||||
|
|
@ -4979,7 +4823,7 @@ static void ds_print_comments_right(RzDisasmState *ds) {
|
|||
for (i = 0; i < lines_count; i++) {
|
||||
char *c = comment + line_indexes[i];
|
||||
ds_print_pre(ds, true);
|
||||
theme_print_color(usrcmt);
|
||||
theme_print_color(usercomment);
|
||||
rz_cons_printf(i == 0 ? "%s" : "; %s", c);
|
||||
if (i < lines_count - 1) {
|
||||
ds_newline(ds);
|
||||
|
|
@ -5010,7 +4854,7 @@ static void ds_print_comments_right(RzDisasmState *ds) {
|
|||
static void ds_print_as_string(RzDisasmState *ds) {
|
||||
char *str = rz_num_as_string(NULL, ds->analysis_op.ptr, true);
|
||||
if (str) {
|
||||
ds_comment(ds, false, "%s; \"%s\"%s", COLOR(ds, pal_comment),
|
||||
ds_comment(ds, false, "%s; \"%s\"%s", COLOR(ds, comment),
|
||||
str, COLOR_RESET(ds));
|
||||
}
|
||||
free(str);
|
||||
|
|
@ -5167,7 +5011,7 @@ static bool line_highlighted(RzDisasmState *ds) {
|
|||
|
||||
static void ds_start_line_highlight(RzDisasmState *ds) {
|
||||
if (ds->show_color && line_highlighted(ds)) {
|
||||
rz_cons_strcat(ds->theme.linehl);
|
||||
rz_cons_strcat(COLOR(ds, linehl));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -806,7 +806,7 @@ typedef struct rz_analysis_op_t {
|
|||
st64 stackptr; /* stack pointer */
|
||||
int refptr; /* if (0) ptr = "reference" else ptr = "load memory of refptr bytes" */
|
||||
ut64 mmio_address; // mmio address
|
||||
RzAnalysisValue *src[3];
|
||||
RzAnalysisValue *src[6];
|
||||
RzAnalysisValue *dst;
|
||||
RzList /*<RzAnalysisValue *>*/ *access; /* RzAnalysisValue access information */
|
||||
RzStrBuf esil;
|
||||
|
|
@ -1648,7 +1648,6 @@ RZ_API RzList /*<RzAnalysisFunction *>*/ *rz_analysis_get_fcns(RzAnalysis *analy
|
|||
|
||||
/* var.c */
|
||||
RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_set_var(RzAnalysisFunction *fcn, RZ_NONNULL RzAnalysisVarStorage *stor, RZ_BORROW RZ_NULLABLE const RzType *type, int size, RZ_NONNULL const char *name);
|
||||
RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_add_var(RzAnalysisFunction *fcn, RZ_OWN RzAnalysisVar *var, int size);
|
||||
RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_get_var_at(RzAnalysisFunction *fcn, RZ_NONNULL RzAnalysisVarStorage *stor);
|
||||
RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_get_stack_var_at(RzAnalysisFunction *fcn, RzStackAddr stack_off);
|
||||
RZ_API RZ_BORROW RzAnalysisVar *rz_analysis_function_get_reg_var_at(RzAnalysisFunction *fcn, RZ_NONNULL const char *reg);
|
||||
|
|
|
|||
|
|
@ -1281,6 +1281,8 @@ RZ_API RZ_OWN RzList /*<RzRegItem *>*/ *rz_core_reg_filter_items_sync(RZ_NONNULL
|
|||
RZ_API void rz_core_cmd_show_analysis_help(RZ_NONNULL RzCore *core);
|
||||
RZ_API void rz_core_rtr_enable(RZ_NONNULL RzCore *core, const char *cmdremote);
|
||||
|
||||
RZ_API RZ_OWN char *rz_core_analysis_var_to_string(RZ_NONNULL RzCore *core, RZ_NONNULL RzAnalysisVar *var);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ afv
|
|||
EOF
|
||||
EXPECT=<<EOF
|
||||
arg int64_t arg3 @ r8
|
||||
arg const char * s @ rcx
|
||||
arg const char *s @ rcx
|
||||
arg int64_t arg2 @ rdx
|
||||
EOF
|
||||
RUN
|
||||
|
|
@ -930,7 +930,186 @@ EXPECT=<<EOF
|
|||
| 0x800004a4 st.w [a15]16, d3
|
||||
| 0x800004a6 mov d15, 1 ; float_ex1.c:24
|
||||
| 0x800004a8 mov d2, d15 ; float_ex1.c:25
|
||||
| 0x800004aa ret
|
||||
| 0x800004aa ret
|
||||
EOF
|
||||
|
||||
NAME=Function va_args arguments from DWARF
|
||||
FILE=bins/elf/float_ex1/float_ex1_hightec
|
||||
CMDS=<<EOF
|
||||
aaa
|
||||
(sig; afv; afs; pd 1; echo "---------")
|
||||
s dbg.printf
|
||||
.(sig)
|
||||
s dbg.prout
|
||||
.(sig)
|
||||
s dbg._fpadd_parts
|
||||
.(sig)
|
||||
s dbg.strnlen_s
|
||||
.(sig)
|
||||
s dbg._Wctomb
|
||||
.(sig)
|
||||
s dbg._Mbtowc
|
||||
.(sig)
|
||||
s dbg.feraiseexcept
|
||||
.(sig)
|
||||
s dbg._Atrealloc
|
||||
.(sig)
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var va_list ap @ stack + 0x4
|
||||
arg const char *fmt @ a6
|
||||
int printf(const char *format);
|
||||
;-- printf:
|
||||
/ int dbg.printf(const char *fmt, va_args ..);
|
||||
| ; arg const char *fmt @ a6
|
||||
| ; var va_list ap @ stack + 0x4
|
||||
| 0x80000c22 mov.aa a6, a4 ; printf.c:10 ; int printf(const char *fmt, va_args ..);
|
||||
---------
|
||||
arg void *str @ a15
|
||||
arg const char *buf @ a5
|
||||
arg size_t n @ d4
|
||||
void dbg.prout(const char *buf);
|
||||
;-- prout:
|
||||
/ void *dbg.prout(void *str, const char *buf, size_t n);
|
||||
| ; arg void *str @ a15
|
||||
| ; arg size_t n @ d4
|
||||
| ; arg const char *buf @ a5
|
||||
| 0x80000c04 mov.aa a15, a4 ; printf.c:5 ; void *prout(void *str, const char *buf, size_t n);
|
||||
---------
|
||||
arg fp_number_type *b @ a12
|
||||
arg fp_number_type *a @ a13
|
||||
arg fp_number_type *tmp @ a15
|
||||
var fractype a_fraction @ d11
|
||||
var int diff @ d12
|
||||
var int a_normal_exp @ d15
|
||||
var int b_normal_exp @ d2
|
||||
var intfrac tfraction @ d3
|
||||
var fractype b_fraction @ d9
|
||||
void dbg._fpadd_parts();
|
||||
;-- _fpadd_parts:
|
||||
/ fp_number_type *dbg._fpadd_parts(fp_number_type *a, fp_number_type *b, fp_number_type *tmp);
|
||||
| ; arg fp_number_type *a @ a13
|
||||
| ; arg fp_number_type *b @ a12
|
||||
| ; arg fp_number_type *tmp @ a15
|
||||
| ; var intfrac tfraction @ d3
|
||||
| ; var int a_normal_exp @ d15
|
||||
| ; var int b_normal_exp @ d2
|
||||
| ; var fractype a_fraction @ d11
|
||||
| ; var fractype b_fraction @ d9
|
||||
| ; var int diff @ d12
|
||||
| 0x80003c60 ld.bu d15, [a4]0 ; fp-bit.c:604 ; fp_number_type *_fpadd_parts(fp_number_type *a, fp_number_type *b, fp_number_type *tmp);
|
||||
---------
|
||||
var const char *sc @ a2
|
||||
arg const char *s @ a4
|
||||
arg size_t maxsize @ d4
|
||||
void dbg.strnlen_s(const char *s);
|
||||
;-- strnlen_s:
|
||||
/ size_t dbg.strnlen_s(const char *s, size_t maxsize);
|
||||
| ; arg size_t maxsize @ d4
|
||||
| ; var const char *sc @ a2
|
||||
| ; arg const char *s @ a4
|
||||
| 0x800030ca mov d2, 0 ; strnlen_s.c:6 ; size_t strnlen_s(const char *s, size_t maxsize);
|
||||
---------
|
||||
arg mbstate_t *pst @ a12
|
||||
var _Statab *pwcstate @ a13
|
||||
arg char *s @ a15
|
||||
arg wchar_t wc @ d15
|
||||
void dbg._Wctomb();
|
||||
;-- _Wctomb:
|
||||
/ int dbg._Wctomb(char *s, wchar_t wc, mbstate_t *pst);
|
||||
| ; arg char *s @ a15
|
||||
| ; arg wchar_t wc @ d15
|
||||
| ; arg mbstate_t *pst @ a12
|
||||
| ; var _Statab *pwcstate @ a13
|
||||
| 0x800018a6 movh.a a2, 53248 ; xwctomb.c:123 ; int _Wctomb(char *s, wchar_t wc, mbstate_t *pst);
|
||||
---------
|
||||
arg wchar_t *pwc @ a4
|
||||
arg const char *s @ a5
|
||||
arg mbstate_t *pst @ a6
|
||||
arg size_t nin @ d4
|
||||
void dbg._Mbtowc(wchar_t *pwc, const char *s, mbstate_t *pst);
|
||||
;-- _Mbtowc:
|
||||
/ int dbg._Mbtowc(wchar_t *pwc, const char *s, size_t nin, mbstate_t *pst);
|
||||
| ; arg size_t nin @ d4
|
||||
| ; arg wchar_t *pwc @ a4
|
||||
| ; arg const char *s @ a5
|
||||
| ; arg mbstate_t *pst @ a6
|
||||
| 0x80003084 movh.a a15, 53248 ; xmbtowc.c:150 ; int _Mbtowc(wchar_t *pwc, const char *s, size_t nin, mbstate_t *pst);
|
||||
---------
|
||||
arg int except @ d4
|
||||
int feraiseexcept(int excepts);
|
||||
;-- feraiseexcept:
|
||||
/ int dbg.feraiseexcept(int except);
|
||||
| ; arg int except @ d4
|
||||
| 0x800037d8 mov d2, 0 ; feraiseexcept.c:173 ; int feraiseexcept(int except);
|
||||
---------
|
||||
var Ppvoidfn newfuns @ a12
|
||||
var size_t inc @ d15
|
||||
void dbg._Atrealloc();
|
||||
;-- _Atrealloc:
|
||||
/ int dbg._Atrealloc();
|
||||
| ; var size_t inc @ d15
|
||||
| ; var Ppvoidfn newfuns @ a12
|
||||
| 0x80001994 movh.a a15, 53248 ; exit.c:22 ; int _Atrealloc();
|
||||
---------
|
||||
EOF
|
||||
RUN
|
||||
|
||||
NAME=Function arguments from DWARF (tricore-gcc)
|
||||
FILE=bins/elf/float_ex1/float_ex1_tricore_gcc
|
||||
CMDS=<<EOF
|
||||
aaa
|
||||
s sym.fn1
|
||||
e asm.comments=0
|
||||
pdf
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
/ sym.fn1();
|
||||
| 0x800004ce mov.aa a14, sp
|
||||
| 0x800004d0 sub.a sp, 24
|
||||
| 0x800004d2 st.w [a14]-4, d4
|
||||
| 0x800004d6 st.a [a14]-8, a4
|
||||
| 0x800004da st.d [a14]-16, e6
|
||||
| 0x800004de st.a [a14]-20, a5
|
||||
| 0x800004e2 st.a [a14]-24, a6
|
||||
| 0x800004e6 ld.w d15, [a14]-20
|
||||
| 0x800004ea jz d15, 0x800004f2
|
||||
| 0x800004ec ld.w d15, [a14]-24
|
||||
| 0x800004f0 jnz d15, 0x800004f6
|
||||
| 0x800004f2 mov d15, 0
|
||||
| 0x800004f4 j 0x8000054c
|
||||
| 0x800004f6 mov d4, 20
|
||||
| 0x800004fa call dbg.malloc
|
||||
| 0x800004fe mov.aa a15, a2
|
||||
| 0x80000500 mov.d d15, a15
|
||||
| 0x80000502 ld.a a15, [a14]-24
|
||||
| 0x80000506 st.w [a15]0, d15
|
||||
| 0x80000508 ld.a a15, [a14]-24
|
||||
| 0x8000050c ld.a a15, [a15]0
|
||||
| 0x8000050e ld.w d15, [a14]-4
|
||||
| 0x80000512 st.w [a15]0, d15
|
||||
| 0x80000514 ld.a a15, [a14]-24
|
||||
| 0x80000518 nop
|
||||
| 0x8000051a ld.w d15, [a15]0
|
||||
| 0x8000051c mov.a a15, d15
|
||||
| 0x8000051e add.a a15, 4
|
||||
| 0x80000520 mov d4, 5
|
||||
| 0x80000522 ld.a a5, [a14]-8
|
||||
| 0x80000526 mov.aa a4, a15
|
||||
| 0x80000528 call dbg.strncpy
|
||||
| 0x8000052c ld.a a15, [a14]-24
|
||||
| 0x80000530 ld.a a15, [a15]0
|
||||
| 0x80000532 ld.d e4, [a14]-16
|
||||
| 0x80000536 call dbg.__truncdfsf2
|
||||
| 0x8000053a mov d15, d2
|
||||
| 0x8000053c st.w [a15]12, d15
|
||||
| 0x8000053e ld.a a15, [a14]-24
|
||||
| 0x80000542 ld.a a15, [a15]0
|
||||
| 0x80000544 ld.w d15, [a14]-20
|
||||
| 0x80000548 st.w [a15]16, d15
|
||||
| 0x8000054a mov d15, 1
|
||||
| 0x8000054c mov d2, d15
|
||||
| 0x8000054e ret
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -958,7 +1137,7 @@ s dbg._Atrealloc
|
|||
EOF
|
||||
EXPECT=<<EOF
|
||||
var va_list ap @ stack + 0x4
|
||||
arg const char * fmt @ a6
|
||||
arg const char *fmt @ a6
|
||||
int printf(const char *format);
|
||||
;-- printf:
|
||||
/ int dbg.printf(const char *fmt, va_args ..);
|
||||
|
|
@ -966,8 +1145,8 @@ int printf(const char *format);
|
|||
| ; var va_list ap @ stack + 0x4
|
||||
| 0x80000c22 mov.aa a6, a4 ; printf.c:10 ; int printf(const char *fmt, va_args ..);
|
||||
|
||||
arg void * str @ a15
|
||||
arg const char * buf @ a5
|
||||
arg void *str @ a15
|
||||
arg const char *buf @ a5
|
||||
arg size_t n @ d4
|
||||
void dbg.prout(const char *buf);
|
||||
;-- prout:
|
||||
|
|
@ -977,22 +1156,22 @@ void dbg.prout(const char *buf);
|
|||
| ; arg const char *buf @ a5
|
||||
| 0x80000c04 mov.aa a15, a4 ; printf.c:5 ; void *prout(void *str, const char *buf, size_t n);
|
||||
|
||||
arg fp_number_type * b @ a12
|
||||
arg fp_number_type * a @ a13
|
||||
arg fp_number_type * tmp @ a15
|
||||
arg fractype a_fraction @ d11
|
||||
arg int diff @ d12
|
||||
arg int a_normal_exp @ d15
|
||||
arg int b_normal_exp @ d2
|
||||
arg int sdiff @ d3
|
||||
arg fractype b_fraction @ d9
|
||||
arg fp_number_type *b @ a12
|
||||
arg fp_number_type *a @ a13
|
||||
arg fp_number_type *tmp @ a15
|
||||
var fractype a_fraction @ d11
|
||||
var int diff @ d12
|
||||
var int a_normal_exp @ d15
|
||||
var int b_normal_exp @ d2
|
||||
var intfrac tfraction @ d3
|
||||
var fractype b_fraction @ d9
|
||||
void dbg._fpadd_parts();
|
||||
;-- _fpadd_parts:
|
||||
/ fp_number_type *dbg._fpadd_parts(fp_number_type *a, fp_number_type *b, fp_number_type *tmp);
|
||||
| ; arg fp_number_type *a @ a13
|
||||
| ; arg fp_number_type *b @ a12
|
||||
| ; arg fp_number_type *tmp @ a15
|
||||
| ; var int sdiff @ d3
|
||||
| ; var intfrac tfraction @ d3
|
||||
| ; var int a_normal_exp @ d15
|
||||
| ; var int b_normal_exp @ d2
|
||||
| ; var fractype a_fraction @ d11
|
||||
|
|
@ -1000,8 +1179,8 @@ void dbg._fpadd_parts();
|
|||
| ; var int diff @ d12
|
||||
| 0x80003c60 ld.bu d15, [a4]0 ; fp-bit.c:604 ; fp_number_type *_fpadd_parts(fp_number_type *a, fp_number_type *b, fp_number_type *tmp);
|
||||
|
||||
arg const char * sc @ a2
|
||||
arg const char * s @ a4
|
||||
var const char *sc @ a2
|
||||
arg const char *s @ a4
|
||||
arg size_t maxsize @ d4
|
||||
void dbg.strnlen_s(const char *s);
|
||||
;-- strnlen_s:
|
||||
|
|
@ -1011,9 +1190,9 @@ void dbg.strnlen_s(const char *s);
|
|||
| ; arg const char *s @ a4
|
||||
| 0x800030ca mov d2, 0 ; strnlen_s.c:6 ; size_t strnlen_s(const char *s, size_t maxsize);
|
||||
|
||||
arg mbstate_t * pst @ a12
|
||||
arg _Statab * pwcstate @ a13
|
||||
arg char * s @ a15
|
||||
arg mbstate_t *pst @ a12
|
||||
var _Statab *pwcstate @ a13
|
||||
arg char *s @ a15
|
||||
arg wchar_t wc @ d15
|
||||
void dbg._Wctomb();
|
||||
;-- _Wctomb:
|
||||
|
|
@ -1024,9 +1203,9 @@ void dbg._Wctomb();
|
|||
| ; var _Statab *pwcstate @ a13
|
||||
| 0x800018a6 movh.a a2, 53248 ; xwctomb.c:123 ; int _Wctomb(char *s, wchar_t wc, mbstate_t *pst);
|
||||
|
||||
arg wchar_t * pwc @ a4
|
||||
arg const char * s @ a5
|
||||
arg mbstate_t * pst @ a6
|
||||
arg wchar_t *pwc @ a4
|
||||
arg const char *s @ a5
|
||||
arg mbstate_t *pst @ a6
|
||||
arg size_t nin @ d4
|
||||
void dbg._Mbtowc(wchar_t *pwc, const char *s, mbstate_t *pst);
|
||||
;-- _Mbtowc:
|
||||
|
|
@ -1044,8 +1223,8 @@ int feraiseexcept(int excepts);
|
|||
| ; arg int except @ d4
|
||||
| 0x800037d8 mov d2, 0 ; feraiseexcept.c:173 ; int feraiseexcept(int except);
|
||||
|
||||
arg Ppvoidfn newfuns @ a12
|
||||
arg size_t inc @ d15
|
||||
var Ppvoidfn newfuns @ a12
|
||||
var size_t inc @ d15
|
||||
void dbg._Atrealloc();
|
||||
;-- _Atrealloc:
|
||||
/ int dbg._Atrealloc();
|
||||
|
|
|
|||
|
|
@ -4307,8 +4307,8 @@ arg int64_t arg1 @ rdi
|
|||
arg int64_t arg3 @ rdx
|
||||
arg int64_t arg2 @ rsi
|
||||
void fcn.00010270(int64_t arg1, int64_t arg2, const char **s, int64_t arg4, int64_t arg5);
|
||||
var const char * s2 @ stack - 0xc8
|
||||
var void * s1 @ stack - 0xc0
|
||||
var const char *s2 @ stack - 0xc8
|
||||
var void *s1 @ stack - 0xc0
|
||||
var uint64_t var_b8h @ stack - 0xb8
|
||||
var int64_t var_b0h @ stack - 0xb0
|
||||
var int64_t var_a8h @ stack - 0xa8
|
||||
|
|
@ -4316,13 +4316,13 @@ var uint64_t var_98h @ stack - 0x98
|
|||
var int64_t var_94h @ stack - 0x94
|
||||
var int64_t var_90h @ stack - 0x90
|
||||
var int64_t var_88h @ stack - 0x88
|
||||
var const char ** var_80h @ stack - 0x80
|
||||
var const char **var_80h @ stack - 0x80
|
||||
var int64_t var_78h @ stack - 0x78
|
||||
var int64_t var_40h @ stack - 0x40
|
||||
arg int64_t arg5 @ r8
|
||||
arg int64_t arg4 @ rcx
|
||||
arg int64_t arg1 @ rdi
|
||||
arg const char ** s @ rdx
|
||||
arg const char **s @ rdx
|
||||
arg int64_t arg2 @ rsi
|
||||
EOF
|
||||
RUN
|
||||
|
|
|
|||
|
|
@ -1478,7 +1478,7 @@ EXPECT=<<EOF
|
|||
var uint64_t var_80h @ stack - 0x80
|
||||
var uint64_t var_71h @ stack - 0x71
|
||||
var int64_t var_70h @ stack - 0x70
|
||||
var char * var_60h @ stack - 0x60
|
||||
var char *var_60h @ stack - 0x60
|
||||
var int64_t var_58h @ stack - 0x58
|
||||
var int64_t var_56h @ stack - 0x56
|
||||
var int64_t var_50h @ stack - 0x50
|
||||
|
|
@ -1488,7 +1488,7 @@ var int64_t var_41h @ stack - 0x41
|
|||
var int64_t var_40h @ stack - 0x40
|
||||
arg int64_t arg_5h @ stack + 0x5
|
||||
arg int argc @ rdi
|
||||
arg char ** argv @ rsi
|
||||
arg char **argv @ rsi
|
||||
var uint64_t var_80h @ stack - 0x80
|
||||
var uint64_t var_71h @ stack - 0x71
|
||||
var char [20] var_70h @ stack - 0x70
|
||||
|
|
@ -1501,7 +1501,7 @@ var int64_t var_41h @ stack - 0x41
|
|||
var int64_t var_40h @ stack - 0x40
|
||||
arg int64_t arg_5h @ stack + 0x5
|
||||
arg int argc @ rdi
|
||||
arg char ** argv @ rsi
|
||||
arg char **argv @ rsi
|
||||
var var_70h = 0x00000028 = [ 'h', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '@', '.', '8', '.', '.', '.', '@', '.' ]
|
||||
EOF
|
||||
RUN
|
||||
|
|
@ -1516,8 +1516,8 @@ afv
|
|||
EOF
|
||||
EXPECT=<<EOF
|
||||
var size_t size @ stack - 0x1c
|
||||
var char * dest @ stack - 0x18
|
||||
var const char * src @ stack - 0x10
|
||||
var char *dest @ stack - 0x18
|
||||
var const char *src @ stack - 0x10
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1531,8 +1531,8 @@ afv
|
|||
EOF
|
||||
EXPECT=<<EOF
|
||||
var size_t size @ stack - 0x1c
|
||||
var char * ptr @ stack - 0x18
|
||||
var const char * src @ stack - 0x10
|
||||
var char *ptr @ stack - 0x18
|
||||
var const char *src @ stack - 0x10
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1546,9 +1546,9 @@ afv
|
|||
EOF
|
||||
EXPECT=<<EOF
|
||||
var size_t var_24h @ stack - 0x24
|
||||
var const char * var_20h @ stack - 0x20
|
||||
var const char * s @ stack - 0x18
|
||||
var const char * var_10h @ stack - 0x10
|
||||
var const char *var_20h @ stack - 0x20
|
||||
var const char *s @ stack - 0x18
|
||||
var const char *var_10h @ stack - 0x10
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1563,9 +1563,9 @@ EOF
|
|||
EXPECT=<<EOF
|
||||
var size_t var_28h @ stack - 0x28
|
||||
var size_t size @ stack - 0x24
|
||||
var const char * src @ stack - 0x20
|
||||
var const char * s2 @ stack - 0x18
|
||||
var char * dest @ stack - 0x10
|
||||
var const char *src @ stack - 0x20
|
||||
var const char *s2 @ stack - 0x18
|
||||
var char *dest @ stack - 0x10
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1578,13 +1578,13 @@ aaft
|
|||
afv
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var const char * src @ stack - 0x24
|
||||
var const char * s2 @ stack - 0x20
|
||||
var const char *src @ stack - 0x24
|
||||
var const char *s2 @ stack - 0x20
|
||||
var size_t var_1ch @ stack - 0x1c
|
||||
var size_t size @ stack - 0x18
|
||||
var char * dest @ stack - 0x14
|
||||
var char *dest @ stack - 0x14
|
||||
var int32_t var_10h @ stack - 0x10
|
||||
arg char ** argv @ stack + 0x4
|
||||
arg char **argv @ stack + 0x4
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1613,9 +1613,9 @@ afvr
|
|||
EOF
|
||||
EXPECT=<<EOF
|
||||
arg size_t arg4 @ rcx
|
||||
arg const char * arg1 @ rdi
|
||||
arg const char *arg1 @ rdi
|
||||
arg int64_t arg3 @ rdx
|
||||
arg const char * arg2 @ rsi
|
||||
arg const char *arg2 @ rsi
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1705,7 +1705,7 @@ s main
|
|||
afv~ptr
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var char ** ptr @ stack - 0x20
|
||||
var char **ptr @ stack - 0x20
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1735,12 +1735,12 @@ s main
|
|||
afv
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var void * va_args @ stack - 0x3c
|
||||
var void *va_args @ stack - 0x3c
|
||||
var uint64_t var_34h @ stack - 0x34
|
||||
var FILE * stream @ stack - 0x30
|
||||
var const char * s @ stack - 0x28
|
||||
var const char * var_20h @ stack - 0x20
|
||||
var const char * var_18h @ stack - 0x18
|
||||
var FILE *stream @ stack - 0x30
|
||||
var const char *s @ stack - 0x28
|
||||
var const char *var_20h @ stack - 0x20
|
||||
var const char *var_18h @ stack - 0x18
|
||||
var int64_t canary @ stack - 0x10
|
||||
EOF
|
||||
RUN
|
||||
|
|
@ -1769,9 +1769,9 @@ s sym.processCmd
|
|||
afv
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var char ** var_14e8h @ stack - 0x14e8
|
||||
var char **var_14e8h @ stack - 0x14e8
|
||||
var int var_14dch @ stack - 0x14dc
|
||||
var int * wstatus @ stack - 0x14d4
|
||||
var int *wstatus @ stack - 0x14d4
|
||||
var int64_t var_14cch @ stack - 0x14cc
|
||||
var int64_t var_14c8h @ stack - 0x14c8
|
||||
var int64_t var_14c4h @ stack - 0x14c4
|
||||
|
|
@ -1779,20 +1779,20 @@ var uint64_t pid @ stack - 0x14c0
|
|||
var uint64_t var_14bch @ stack - 0x14bc
|
||||
var uint64_t var_14b8h @ stack - 0x14b8
|
||||
var int64_t var_14b4h @ stack - 0x14b4
|
||||
var const char * var_14b0h @ stack - 0x14b0
|
||||
var const char * s @ stack - 0x14a8
|
||||
var const char *var_14b0h @ stack - 0x14b0
|
||||
var const char *s @ stack - 0x14a8
|
||||
var int64_t var_14a0h @ stack - 0x14a0
|
||||
var char * src @ stack - 0x1498
|
||||
var const char * v2 @ stack - 0x1490
|
||||
var const char * var_1488h @ stack - 0x1488
|
||||
var void * var_1480h @ stack - 0x1480
|
||||
var char * dest @ stack - 0x1478
|
||||
var void * var_1428h @ stack - 0x1428
|
||||
var const char * s1 @ stack - 0x1028
|
||||
var char *src @ stack - 0x1498
|
||||
var const char *v2 @ stack - 0x1490
|
||||
var const char *var_1488h @ stack - 0x1488
|
||||
var void *var_1480h @ stack - 0x1480
|
||||
var char *dest @ stack - 0x1478
|
||||
var void *var_1428h @ stack - 0x1428
|
||||
var const char *s1 @ stack - 0x1028
|
||||
var int64_t var_20h @ stack - 0x20
|
||||
arg int argc @ rdi
|
||||
arg char ** argv @ rsi
|
||||
var char * str @ stack - 0xb8
|
||||
arg char **argv @ rsi
|
||||
var char *str @ stack - 0xb8
|
||||
var int64_t var_ach @ stack - 0xac
|
||||
var int64_t var_a8h @ stack - 0xa8
|
||||
var uint64_t var_a4h @ stack - 0xa4
|
||||
|
|
@ -1810,19 +1810,19 @@ var int var_78h @ stack - 0x78
|
|||
var int var_74h @ stack - 0x74
|
||||
var int64_t var_70h @ stack - 0x70
|
||||
var int64_t var_6ch @ stack - 0x6c
|
||||
var char * var_68h @ stack - 0x68
|
||||
var char * var_60h @ stack - 0x60
|
||||
var char * var_58h @ stack - 0x58
|
||||
var char * var_50h @ stack - 0x50
|
||||
var char *var_68h @ stack - 0x68
|
||||
var char *var_60h @ stack - 0x60
|
||||
var char *var_58h @ stack - 0x58
|
||||
var char *var_50h @ stack - 0x50
|
||||
var uint64_t var_48h @ stack - 0x48
|
||||
var const char * s1 @ stack - 0x40
|
||||
var const char * s @ stack - 0x38
|
||||
var const char * var_30h @ stack - 0x30
|
||||
var const char * var_28h @ stack - 0x28
|
||||
var const char *s1 @ stack - 0x40
|
||||
var const char *s @ stack - 0x38
|
||||
var const char *var_30h @ stack - 0x30
|
||||
var const char *var_28h @ stack - 0x28
|
||||
var int64_t var_20h @ stack - 0x20
|
||||
var int64_t var_10h @ stack - 0x10
|
||||
arg int64_t arg1 @ rdi
|
||||
arg char * arg2 @ rsi
|
||||
arg char *arg2 @ rsi
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1836,27 +1836,27 @@ afv
|
|||
EOF
|
||||
EXPECT=<<EOF
|
||||
var int32_t var_1454h @ stack - 0x1454
|
||||
var void * var_1438h @ stack - 0x1438
|
||||
var const char * s1 @ stack - 0x1038
|
||||
var int * wstatus @ stack - 0x44
|
||||
var void *var_1438h @ stack - 0x1438
|
||||
var const char *s1 @ stack - 0x1038
|
||||
var int *wstatus @ stack - 0x44
|
||||
var int32_t var_40h @ stack - 0x40
|
||||
var const char * var_3ch @ stack - 0x3c
|
||||
var const char *var_3ch @ stack - 0x3c
|
||||
var int32_t var_38h @ stack - 0x38
|
||||
var int32_t var_34h @ stack - 0x34
|
||||
var int32_t var_30h @ stack - 0x30
|
||||
var pid_t pid @ stack - 0x2c
|
||||
var const char * v2 @ stack - 0x28
|
||||
var const char *v2 @ stack - 0x28
|
||||
var int32_t var_24h @ stack - 0x24
|
||||
var const char * src @ stack - 0x20
|
||||
var const char *src @ stack - 0x20
|
||||
var int32_t var_1ch @ stack - 0x1c
|
||||
var int32_t var_18h @ stack - 0x18
|
||||
var const char * s @ stack - 0x14
|
||||
var const char * var_10h @ stack - 0x10
|
||||
var const char *s @ stack - 0x14
|
||||
var const char *var_10h @ stack - 0x10
|
||||
var int32_t var_ch @ stack - 0xc
|
||||
var int32_t var_8h @ stack - 0x8
|
||||
var const char * option @ stack - 0x4
|
||||
var const char *option @ stack - 0x4
|
||||
arg int argc @ r0
|
||||
arg char ** argv @ r1
|
||||
arg char **argv @ r1
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1873,9 +1873,9 @@ var int64_t var_2dh @ stack - 0x2d
|
|||
var int64_t var_2ch @ stack - 0x2c
|
||||
var unsigned int var_28h @ stack - 0x28
|
||||
var int64_t var_24h @ stack - 0x24
|
||||
var const char * var_20h @ stack - 0x20
|
||||
var const char *var_20h @ stack - 0x20
|
||||
var long int var_18h @ stack - 0x18
|
||||
var const char * var_10h @ stack - 0x10
|
||||
var const char *var_10h @ stack - 0x10
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1888,14 +1888,14 @@ s main
|
|||
afv
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var char ** var_30h @ stack - 0x30
|
||||
var char ** var_28h @ stack - 0x28
|
||||
var char **var_30h @ stack - 0x30
|
||||
var char **var_28h @ stack - 0x28
|
||||
var int var_1ch @ stack - 0x1c
|
||||
var void * var_18h @ stack - 0x18
|
||||
var void *var_18h @ stack - 0x18
|
||||
var int var_ch @ stack - 0xc
|
||||
arg int argc @ rdi
|
||||
arg char ** envp @ rdx
|
||||
arg char ** argv @ rsi
|
||||
arg char **envp @ rdx
|
||||
arg char **argv @ rsi
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1929,7 +1929,7 @@ s main
|
|||
afv~var_28h
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var const char * var_28h @ stack - 0x28
|
||||
var const char *var_28h @ stack - 0x28
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
@ -1941,7 +1941,7 @@ s sym.foo
|
|||
afv~var_28h
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
var size_t * var_28h @ stack - 0x28
|
||||
var size_t *var_28h @ stack - 0x28
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ var int64_t var_30h @ stack - 0x30
|
|||
var int64_t var_28h @ stack - 0x28
|
||||
var int64_t var_20h @ stack - 0x20
|
||||
var int64_t var_18h @ stack - 0x18
|
||||
arg int64_t error @ r12
|
||||
arg int64_t self @ r13
|
||||
var int64_t error @ r12
|
||||
var int64_t self @ r13
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue