You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Current DR uses (%esp) to represent memory reference operand of instruction
like push, call, which is not correct.
Push instruction first decrement %esp and then access memory pointed by
%esp, so the memory address before execution push should be -4(%esp)
instead of (%esp). Similar problems for instructions pop, return.
This is caused by the decode table.
See comments in decode.h:
All i_eSP really read 0x4(esp) or some other offset, depending on
if take esp value before or after instrs, etc.
and next to OPSZ_4x8_short2:
Note that this IR does not distinguish multiple stack
operations; dispatch by opcode must be used:
X2 = far call/far ret
X3 = int/iret
X8 = pusha/popa
X* = enter (dynamically varying amount)
Note that stack operations may also modify the stack
pointer prior to accessing the top of the stack, so
for example "(esp)" may in fact be "4(esp)" depending
on the opcode.
It would be better to have work around code in the decoding instead of on
each tool.
From [email protected] on June 24, 2009 21:40:13
Current DR uses (%esp) to represent memory reference operand of instruction
like push, call, which is not correct.
Push instruction first decrement %esp and then access memory pointed by
%esp, so the memory address before execution push should be -4(%esp)
instead of (%esp). Similar problems for instructions pop, return.
This is caused by the decode table.
See comments in decode.h:
and next to OPSZ_4x8_short2:
It would be better to have work around code in the decoding instead of on
each tool.
Original issue: http://code.google.com/p/dynamorio/issues/detail?id=164
The text was updated successfully, but these errors were encountered: