Skip to content

Commit

Permalink
CallstackInstr: switch to SBE/EBE callbacks
Browse files Browse the repository at this point in the history
The old logic would miss many calls if tb_chaining was enabled (which is
is by default). Since this plugin did not disable tb_chaining, many calls
would be missed if a user didn't disable chaining or load another plugin
that disabled chaining.

This commit updates the plugin to use start_block_exec and end_block_exec
which work even with tb_chaining enabled.
  • Loading branch information
Andrew Fasano committed Feb 17, 2024
1 parent 683ee85 commit 52e9126
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions panda/plugins/callstack_instr/callstack_instr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,8 @@ extern "C" {
#include "panda/plog.h"
#include "callstack_instr_int_fns.h"

bool translate_callback(CPUState* cpu, target_ulong pc);
int exec_callback(CPUState* cpu, target_ulong pc);
void before_block_exec(CPUState* cpu, TranslationBlock *tb);
void after_block_exec(CPUState* cpu, TranslationBlock *tb, uint8_t exitCode);
void start_block_exec(CPUState* cpu, TranslationBlock *tb);
void end_block_exec(CPUState* cpu, TranslationBlock *tb, uint8_t exitCode);
void after_block_translate(CPUState* cpu, TranslationBlock *tb);

bool init_plugin(void *);
Expand Down Expand Up @@ -322,7 +320,7 @@ void after_block_translate(CPUState *cpu, TranslationBlock *tb) {
return;
}

void before_block_exec(CPUState *cpu, TranslationBlock *tb) {
void start_block_exec(CPUState *cpu, TranslationBlock *tb) {
// if the block a call returns to was interrupted before it completed, this
// function will be called twice - only want to remove the return value from
// the stack once
Expand Down Expand Up @@ -366,7 +364,7 @@ void before_block_exec(CPUState *cpu, TranslationBlock *tb) {
}
}

void after_block_exec(CPUState* cpu, TranslationBlock *tb, uint8_t exitCode) {
void end_block_exec(CPUState* cpu, TranslationBlock *tb, uint8_t exitCode) {
target_ulong pc = 0x0;
target_ulong cs_base = 0x0;
uint32_t flags = 0x0;
Expand Down Expand Up @@ -611,9 +609,9 @@ bool init_plugin(void *self) {

pcb.after_block_translate = after_block_translate;
panda_register_callback(self, PANDA_CB_AFTER_BLOCK_TRANSLATE, pcb);
pcb.after_block_exec = after_block_exec;
pcb.end_block_exec = end_block_exec;
panda_register_callback(self, PANDA_CB_AFTER_BLOCK_EXEC, pcb);
pcb.before_block_exec = before_block_exec;
pcb.start_block_exec = start_block_exec;
panda_register_callback(self, PANDA_CB_BEFORE_BLOCK_EXEC, pcb);

bool setup_ok = true;
Expand Down

0 comments on commit 52e9126

Please sign in to comment.