?????????? GDB ?????????????????????????ó???????????????????е?????? Ctrl + C?????????????????????GDB??????????????????????????????????
??????????????????????
????????????????????????
??????????????????о??????????????????????????????????????????????????????????С????????????????????????????Valgrind ?????????????????????????????????????????Valgrind???ó?????1000????????GDB?????????????????Qemu??????????
???????????????????£????????……????????????????????
????????????……???????????????????????????????????????Щ??????
?????????????Linux??????????????????£??????????????????????????????ptrace??????????????μ????????????????????????????????????????????????Linux?н????????????????????????:-)??
????Linux Ptrace API
????Linux Ptrace API ???????????????????????????????????????????????????????????????????????????
??????д????????????? ??PTRACE_PEEKTEXT??PTRACE_PEEKUSER??PTRACE_POKE……
??????д??????????CPU????? PTRACE_GETREGSET??PTRACE_SETREGS
???????????????????PTRACE_O_TRACEEXEC?? PTRACE_O_TRACECLONE?? PTRACE_O_EXITKILL?? PTRACE_SYSCALL????????????Щ???????exec syscall??clone??exit??????????????
??????????????У?PTRACE_SINGLESTEP??PTRACE_KILL??PTRACE_INTERRUPT??PTRACE_CONT ?????CPU?????????????У?
??????????????????PTRACE_GETSIGINFO??PTRACE_SETSIGINFO
????Ptrace??????????
????Ptrace?????????????????Χ????????????????????????????????????ι???????????????????????????????????????????????????:-)??
????Ptrace ??Linux???????????????????????????????????????
??????д?????Linux??copy_to/from_user??
???????CPU?????????copy_regset_to/from_user?????????????????????????CPU??????????δ?????????????Linux??struct task_struct *??????У???
????????????????????last_siginfo
??????????У?????????????????????y???task????right flag??ARM??x86??
????Ptrace??????????????б?Hooked?????? ptrace_event???????????????????????????PTRACE_O_TRACEEXEC?????????????????????????????SIGTRAP????
???????Ptrace??????????????
?????????????????????Linux?????????????????????????????????????GDB??????????????????????????????????????????????
?????????????????????????????C?????????????????
struct target_ops
{
struct target_ops *beneath;
/* To the target under this one.  */
const char *to_shortname;
/* Name this target type */
const char *to_longname;
/* Name for printing */
const char *to_doc;
/* Documentation.  Does not include trailing
newline?? and starts with a one-line descrip-
tion (probably similar to to_longname).  */
void (*to_attach) (struct target_ops *ops?? const char *?? int);
void (*to_fetch_registers) (struct target_ops *?? struct regcache *?? int);
void (*to_store_registers) (struct target_ops *?? struct regcache *?? int);
int (*to_insert_breakpoint) (struct target_ops *?? struct gdbarch *??
struct bp_target_info *);
int (*to_insert_watchpoint) (struct target_ops *??
CORE_ADDR?? int?? int?? struct expression *);
...
}
?????????GDB??????Щ????????????????????????????????????????????????????????????????????????????????磺
???????????Linux
???????????????
????????????????ptrace??ttrace??
?????????????Linux ARM??Linux x86??
??????????????????????????????????Э?饗TCP/IP?????ж????????“????”???????????????
?????????????????????????????Linux???????gdbserver??????????????????????????????棨JTAG?? ?????????????????????????? Qemu?????????????????ptrace?????????????????????????????????????????????????????????????????OS??????????
???????????????????Э?飬Embecosm д?????????????????????????Gdbserver????????????????????????????????Qemu gdb-server stub ??
??????????
?????????????ptrace??API???????????е????????????????????
???????exec?????ò?????????????????
???????CPU??????????????????????????????
???????clone??fork?????????????
????????????????????????????????
???????????????????????????????????????????Щ???????????……???????????????????????????????????????????????????????????£???????????????????????ι?????????????????????????????????????????????
?????????Ptrace API???????
?????????????????????????????ptrace API???????????????????????沢??????????????????????????е????????????????????????????????????????hack??????????????????????????????????????????
????1????????????????ptrace??????????????????????????????????????????С?
????2?????????λ??д??????????????????????????????????????????
????3?????????????????е?????????????????????????????????????????е????????ú????????????????У?????????????????
????4????????????????У??????????????????????????????????????????????ж????????????????????????
????5??????ж??Linux????????SIGTRAP??????????????????……???????????????????????????????????
????6?????????????????????????????????????????????????? trap??????????????????IP??????????б??У?????????????????????????????????е????????????????????????????
????7??????????????????????????????????????????????????κ???/??????????£????????????????С?
????8????????????У????????????? 1??д????????????????????????????棻 2????????У???????е???CPU?????????ptrace ??????У??? 3?????????д?????????????й???????ο?????????? ??4??????????????????
???????????????????????????????????????????????????????????????????????????????????е??????????????????????????????????????????GDB????ν?????????????????????????????ú??????????GDB???????????????????????????????д??????е?????????????????????????????????????????д????????????????????Щ?????????????????????????????……