extern BOOL memory_get_current_frame(ADDRESS* address);
extern BOOL memory_get_string(HANDLE hp, void* addr, BOOL in_debuggee, BOOL unicode, char* buffer, int size);
extern BOOL memory_get_string_indirect(HANDLE hp, void* addr, BOOL unicode, char* buffer, int size);
-extern void memory_disassemble(const struct dbg_lvalue*, const struct dbg_lvalue*, int offset);
+extern void memory_disassemble(const struct dbg_lvalue*, const struct dbg_lvalue*, int instruction_count);
extern BOOL memory_disasm_one_insn(ADDRESS* addr);
extern void print_bare_address(const ADDRESS* addr);
extern void print_address(const ADDRESS* addr, BOOLEAN with_line);
}
void memory_disassemble(const struct dbg_lvalue* xstart,
- const struct dbg_lvalue* xend, int offset)
+ const struct dbg_lvalue* xend, int instruction_count)
{
static ADDRESS last = {0,0,0};
+ int stop = 0;
+ int i;
if (!xstart && !xend)
{
last.Mode = AddrModeFlat;
last.Offset = types_extract_as_integer(xstart);
}
- if (xend) offset = types_extract_as_integer(xend) - last.Offset + 1;
+ if (xend)
+ stop = types_extract_as_integer(xend);
}
- while (offset-- > 0 && memory_disasm_one_insn(&last));
+ for (i = 0; (instruction_count == 0 || i < instruction_count) &&
+ (stop == 0 || last.Offset <= stop); i++)
+ memory_disasm_one_insn(&last);
}