����Linux�Ż�
Linux����

��������GDB

����ʱ��:2018-01-27 10:13:37��Դ:Torival����:linux.cn
���� C ���������Һ����š�Ȼ������֮ǰ��д�ҵIJ���ϵͳʱ�����кܶ�� Bug ��Ҫ���ԡ��Һ����˵�ʹ������ qemu ģ�������������ҽ����������ӵ��ҵIJ���ϵͳ��������������� gdb��
��������GDB
�ҵý���һ�£������ʹ�� gdb ����һЩС���飬��Ϊ�ҷ��ֳ�ѧ����ʱ����ĺܻ��ҡ����ǽ���������һ��С�����У����öϵ㣬�鿴�ڴ档
 
1����ϵ�
���������ʹ�ù�����������������Ѿ������öϵ��ˡ�
������һ������Ҫ���Եij�����Ȼû���κ� Bug��:
#include <stdio.h>
void do_thing() {
printf("Hi!\n");
}
int main() {
do_thing();
}
����Ϊ hello.c. ���ǿ���ʹ�� dbg ����������������
bork@kiwi ~> gcc -g hello.c -o hello
bork@kiwi ~> gdb ./hello
�����Ǵ�������Ϣ���� hello.c��Ϊ�� gdb ���Ը��ù����������������������Ŀ����ʾ��������������
(gdb)
���ǿ���ʹ�� break �������öϵ㣬Ȼ��ʹ�� run ��ʼ���Գ���
(gdb) break do_thing 
Breakpoint 1 at 0x4004f8
(gdb) run
Starting program: /home/bork/hello 
Breakpoint 1, 0x00000000004004f8 in do_thing ()
������ͣ���� do_thing ��ʼ�ĵط���
���ǿ���ͨ�� where �鿴�������ڵĵ���ջ��
(gdb) where
#0  do_thing () at hello.c:3
#1  0x08050cdb in main () at hello.c:6
(gdb) 
 
2���Ķ�������
ʹ�� disassemble ������ǿ��Կ�����������Ļ����롣�����ˣ����� x86 �����롣��Ȼ�Ҳ��Ǻܶ��������� callq ��һ���� printf �������á�
(gdb) disassemble do_thing
Dump of assembler code for function do_thing:
0x00000000004004f4 <+0>:     push   %rbp
0x00000000004004f5 <+1>:     mov    %rsp,%rbp
=> 0x00000000004004f8 <+4>:     mov    $0x40060c,%edi
0x00000000004004fd <+9>:     callq  0x4003f0 
0x0000000000400502 <+14>:    pop    %rbp
0x0000000000400503 <+15>:    retq
��Ҳ����ʹ�� disassemble ����д disas��
 
3���鿴�ڴ�
�������ҵ��ں�ʱ����ʹ�� gdb ����Ҫԭ���ǣ���ȷ���ڴ沼�����������������������ڴ�������� examine������ʹ����д x�����ǽ�ʹ��x��
ͨ���Ķ�����Ļ����룬�ƺ� 0x40060c ������������Ҫ��ӡ���ַ�����ַ����������һ�¡�
(gdb) x/s 0x40060c
0x40060c:        "Hi!"
��ȷ��������x/s �� /s ���֣���˼��“������Ϊ�ַ���չʾ”����Ҳ����“չʾ 10 ���ַ�”����������
(gdb) x/10c 0x40060c
0x40060c:����72 'H'����105 'i' 33 '!'����0 '\000'����1 '\001'����27 '\033'����3 '\003'����59 ';'
0x400614:����52 '4'����0 '\000'
����Կ���ǰ�ĸ��ַ��� H��i��! �� \0����������֮�����һЩ����صĶ�����
��֪�� gdb �ܶ������Ķ�������������Ȼ���Ǻ��˽��������� x �� break ���һ�úܶࡣ
 
����GDB��������������//m.ajphoenix.com/linux/32663.html
linux��gdb�Ŀ��ӻ����ԣ�//m.ajphoenix.com/linux/29191.html
��Linux�����ʹ��gdb����C����//m.ajphoenix.com/linux/28147.html
ʹ��GDB����C�⣺//m.ajphoenix.com/linux/24479.html
ͨ��gdb���ٶ�λ“�δ���”��λ�ã�//m.ajphoenix.com/linux/24020.html