���������������ϵ�е����һƪ���£���һ�Σ��ҽ��Ե����е�һЩ�����ĸ�����и߲�ĸ�����Զ�̵��ԡ�������֧�֡�����ʽ����Ͷ��߳�֧�֡���Щ�뷨ʵ�������Ƚϸ��ӣ������Ҳ�����ϸ˵������������������������Ļ����Һ�����ش��й���Щ��������⡣
ϵ����������
��������//m.ajphoenix.com/linux/31643.html��
�ϵ㣨//m.ajphoenix.com/linux/31737.html��
�Ĵ������ڴ棨//m.ajphoenix.com/linux/31847.html��
Դ����źţ�//m.ajphoenix.com/linux/32098.html��
Դ�뼶��ִ�У�//m.ajphoenix.com/linux/32424.html��
Դ�뼶�ϵ㣨//m.ajphoenix.com/linux/32650.html��
��ջչ����//m.ajphoenix.com/linux/32724.html��
����������//m.ajphoenix.com/linux/32739.html��
Զ�̵���
Զ�̵��Զ���Ƕ��ʽϵͳ��Բ�ͬ�������е��Էdz����á������ڸ������������������ϵͳ��Ӳ���Ľ���֮��������һ���ܺõķֽ��ߡ���ʵ�ϣ��� GDB �� LLDB �����ĵ�������ʹ�ڵ��Ա��س���ʱҲ������ΪԶ�̵��������С�һ��ܹ��������ģ�
������������ͨ�������н����������Ҳ�������ʹ�õ��� IDE����ô����������һ�������ͨ�������ӿ������������ͨ�š���Ŀ������ϣ������뱾��һ������һ�����Դ�� ������������һ���dz�С�IJ���ϵͳ���Կ�İ�װ������ִ�����еĵͼ������������ڵ�ַ�����öϵ㡣��˵“��������”����Ϊ�����Դ�����Խ��Խ�����磬�һ����ϵ� LLDB ���Դ����С�� 7.6MB�����Դ��ͨ��ʹ��һЩ�ض��ڲ���ϵͳ�Ĺ��ܣ������ǵ��������� ptrace���ͱ����Խ����Լ�ͨ��Զ��Э��ĵ�����ͨ�š�
�����Զ�̵���Э���� GDB Զ��Э�顣����һ�ֻ����ı������ݰ���ʽ�������ڵ������͵��Դ��֮�䴫���������Ϣ���Ҳ�����ϸ����������������� https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html ��һ���Ķ������������ LLDB ��ִ������ log enable gdb-remote packets����ô�㽫���ͨ��Զ��Э�鷢�͵��������ݰ��ĸ�����Ϣ���� GDB �ϣ�������� set remotelogfile <file> ��ͬ�������顣
��Ϊһ�������ӣ��������öϵ�����ݰ���
$Z0,400570,1#43
$ ������ݰ��Ŀ�ʼ��Z0 �Dz����ڴ�ϵ�����400570 �� 1 �Dz���������ǰ�������öϵ�ĵ�ַ���������ض�Ŀ��Ķϵ�����˵���������#43 ��У��ֵ����ȷ������û����
GDB Զ��Э��dz�������չ�Զ������ݰ��������ʵ��ƽ̨�������ض��Ĺ��ܷdz����á�
������Ͷ�̬����֧��
��������Ҫ֪�������Գ����������Щ�����⣬�Ա����������öϵ㡢��ȡԴ���뼶�����Ϣ�ͷ��ŵȡ������ұ���̬���ӵĿ�֮�⣬���������������������ʱͨ�� dlopen ���صĿ⡣Ϊ�˴ﵽ���Ŀ�ģ���̬������ά��һ�� ����ṹ�塣�ýṹ��ά�����������������������Լ�һ��ָ��ÿ����������ʱ���õĺ�����ָ�롣����ṹ�洢�� ELF �ļ��� .dynamic ���У��ڳ���ִ��֮ǰ����ʼ����
һ���ĸ����㷨��
�ٳ����� ELF ͷ�в��ҳ������ڣ����߿���ʹ�ô洢�� /proc/<pid>/aux �еĸ�����������
�ٳ����ڳ������ڴ�����һ���ϵ㣬����ʼִ�С�
������ϵ�ʱ��ͨ���� ELF �ļ��в��� .dynamic �ļ��ص�ַ�ҵ�����ṹ��ĵ�ַ��
��齻��ṹ���Ի�ȡ��ǰ���صĿ���б���
���������º��������öϵ㡣
ÿ������ϵ�ʱ���б�������¡�
�ٳ�������ѭ��������ִ�г��ȴ��źţ�ֱ���ٳ����ź��˳���
�Ҹ���Щ����д��һ��С���ӣ�������� https://github.com/TartanLlama/dltrace �ҵ��������������Ȥ���ҿ��Խ���д�ø���ϸһ�㡣
����ʽ����
����ʽ�����dz����һ��ܣ������û��ڵ��Գ���ʱ��ԭʼԴ�����еı���ʽ���м��㡣���磬�� LLDB �� GDB �У�����ִ�� print foo() ������ foo ��������ӡ�����
���ݱ���ʽ�ĸ��ӳ̶ȣ��м��ֲ�ͬ�ļ��㷽�����������ʽֻ��һ���ı�ʶ������ô���������Բ鿴������Ϣ���ҵ��ñ�������ӡ����ֵ�����������ڱ�ϵ�����һ�������������������������ʽ�е㸴�ӣ�����ܽ����������м����ʽ ��IR�� ����������ý�������磬����ijЩ����ʽ��LLDB ��ʹ�� Clang ������ʽ����Ϊ LLVM IR ��������͡��������ʽ�����ӣ�������Ҫ����ijЩ��������ô���������Ҫ JIT ��Ŀ�겢�ڱ������ߵĵ�ַ�ռ���ִ�С����漰������ mmap ������һЩ��ִ���ڴ棬Ȼ����Ĵ��븴�Ƶ��ÿ鲢ִ�С�LLDB ͨ��ʹ�� LLVM �� JIT ������ʵ�֡�
������������˽� JIT ���룬��ǿ���Ƽ� Eli Bendersky ���������������£�http://eli.thegreenplace.net/tag/code-generation����
���̵߳���֧��
��ϵ��չʾ�ĵ�������֧�ֵ��߳�Ӧ�ó�����Ϊ�˵��Դ������ʵ�����߳�֧���Ƿdz���Ҫ�ġ�֧����һ�����ķ����Ǹ����̵߳Ĵ����������� procfs �Ի�ȡ�������Ϣ��
Linux �߳̿��Ϊ pthreads�������� pthread_create ʱ�����ʹ�� clone ϵͳ����������һ���µ��̣߳����ǿ����� ptrace �������ϵͳ���ã���������ں����� 2.5.46����Ϊ�ˣ�����Ҫ�����ӵ�������֮������һЩ ptrace ѡ�
ptrace(PTRACE_SETOPTIONS, m_pid, nullptr, PTRACE_O_TRACECLONE);
���ڵ� clone ������ʱ���ý��̽��յ����ǵ������� SIGTRAP �źš����ڱ�ϵ���еĵ�����������Խ�һ���������ӵ� handle_sigtrap ���������̵߳Ĵ�����
case (SIGTRAP | (PTRACE_EVENT_CLONE << 8)):
//get the new thread ID
unsigned long event_message = 0;
ptrace(PTRACE_GETEVENTMSG, pid, nullptr, message);
//handle creation
//...
һ���յ��ˣ�����Կ��� /proc/<pid>/task/ ���鿴�ڴ�ӳ��֮������������������Ϣ��
GDB ʹ�� libthread_db�����ṩ��һ�Ѱ���������������Ͳ���Ҫ�Լ������ʹ�����������������֣��Ҳ�������չʾ����ι��������������ʹ�����������ȥ�Ķ�����̳̣�http://timetobleed.com/notes-about-an-odd-esoteric-yet-incredibly-useful-library-libthread_db/����
���߳�֧������ӵIJ����ǵ��������߳�״̬�Ľ�ģ���ر��������ϣ��֧�ֲ����ģʽ����������漰��ֹһ�� CPU ��ij���칹���ԡ�
���
���ϵ�л��˺ܳ�ʱ���д�꣬�����������������ѧ���˺ܶණ������ϣ�������а����ġ�������й��ڵ��Ի�ϵ���е��κ����⣬���� Twitter @TartanLlama����������ϵ�ҡ���������뿴���������κε������⣬����֪���һ������ٷ����������¡�
�������ø��µ�ַ��//m.ajphoenix.com/linux/32776.html