Okay, I will test uprobes with crashme.
You are right, the validate_insn_32bits refers to good_insns_32 and
validate_insn_64bits refers to good_insns_64 to decode 1 byte
instructions. Some instructions like 0x06 and 0x0e seem to be valid in
good_insns_32 but not in good_insns_64.
I think you are referring to RIP related instructions, this how we
handle them.
Please correct us if we are wrong, but here is what we do
- While analyzing the instruction, take into account which register acts
as the code segment register.
- When interrupted (but before singlestep), copy the contents of the
register which we think acts as code segment register in our
above analysis into per-task scratch variable.
- After singlestepping we retrieve the saved per-task scratch
variable into the corresponding register.
Okay, Thanks for confirming this.
--
Thanks and Regards
Srikar
--