[PATCH] [WineDbg]: in x86_64 backend, now recognize 'rep ret' as a valid function return insn
Eric Pouech
eric.pouech at orange.fr
Mon Jan 2 13:58:23 CST 2012
A+
---
programs/winedbg/be_x86_64.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/programs/winedbg/be_x86_64.c b/programs/winedbg/be_x86_64.c
index 253b4ac..7dbd301 100644
--- a/programs/winedbg/be_x86_64.c
+++ b/programs/winedbg/be_x86_64.c
@@ -300,7 +300,15 @@ static unsigned be_x86_64_is_step_over_insn(const void* insn)
static unsigned be_x86_64_is_function_return(const void* insn)
{
BYTE c;
- return dbg_read_memory(insn, &c, sizeof(c)) && ((c == 0xC2) || (c == 0xC3));
+
+ /* sigh... amd64 for prefetch optimization requires 'rep ret' in some cases */
+ if (!dbg_read_memory(insn, &c, sizeof(c))) return FALSE;
+ if (c == 0xF3) /* REP */
+ {
+ insn = (const char*)insn + 1;
+ if (!dbg_read_memory(insn, &c, sizeof(c))) return FALSE;
+ }
+ return c == 0xC2 /* ret */ || c == 0xC3 /* ret NN */;
}
static unsigned be_x86_64_is_break_insn(const void* insn)
More information about the wine-patches
mailing list