���Ȃ����m��Ȃ��v���O�����̐^�̎n�܂�\�\main()���̑O�ɂ���X�^�[�g�A�b�v�Ƃ��Fmain()���̑O�ɂ͉�������̂��i8�j�i1/3 �y�[�W�j
C����́uHello World�I�v�v���O�����Ŏg����A�uprintf()�v�umain()�v���̒��g���A�f�o�b�K�ɂ���͂Ƌt�A�Z���u���A�\�[�X�R�[�h�lj��Ȃǂ̂��܂��܂ȑ��ʂ���T��A�ځB����́Amain()�̒��g��A���̑O�ɌĂяo�����X�^�[�g�A�b�v�Ƃ��������������ɂ��Ċw�ԁB
���Ђ̒�����L�p�ȋZ�p�����s�b�N�A�b�v���ďЉ��{�V���[�Y�B����́A�G�a�V�X�e�����s�̏��Ёw�n���[�gHello, World�h OS�ƕW�����C�u�����̃V�S�g�Ƃ����݁i2015�N9��11�����s�j�x����̔����ł��B
�����ӁF�{�e�́A���ҋy�яo�ŎЂ̋��āA���̂܂ܓ]�ڂ������̂ł��B���̂��ߗp���p��̓��ꃋ�[���Ȃǂ́�IT�̂���Ƃ͈�v���܂���B���炩���߂��������������B
���ҏW�����F�O��L���uLinux�J�[�l���Ɍ���A�V�X�e���R�[���ԍ��ƈ����A�V�X�e���R�[���E���b�p�[�Ƃ��v�͂�����
main()���̑O�ƌ�
�@printf()�̌Ăяo���̐�ɂ�����̂ƃV�X�e���R�[���̎d�g�݂͔��R�Ƃ킩�������A���̓v���O�����̊J�n�ƏI�����ɉ����s����̂������Ă݂悤�B���̌Ăяo�����ǂ��̂ł͂Ȃ��A�Ăяo�����������̂ڂ��Ă݂�킯���B
�@C����̓��发���J���ƁA�v���O�����̎��s��main()������J�n�����Ɛ�������Ă��邱�Ƃ�����B����������͉R�ł���A���̑O�ɃX�^�[�g�A�b�v�Ƃ�������������������Ɛ�������Ă���{������B
�@���A���̃X�^�[�g�A�b�v�̏����ɂ��Đ�������Ă���{�͏��Ȃ��B���������X�^�[�g�A�b�v�ł́A�ǂ̂悤�ȏ������s���Ă���̂��낤���B
�@�܂��v���O������exit()���Ăяo�����ƂŏI������B�ł͂���exit()�ł́A�����s���Ă���̂��낤���B�Ȃ�exit()���Ăяo�����ƂŁA�v���O�����͏I������̂��낤���B�v���O�����̏I����main()������߂邱�Ƃł��s���邪�Amain()����߂�����ɂ͂���������������̂��낤���B
�@�{�͂ł�main()�����Ăяo�����܂łƁA�Ăяo���ꂽ������Ă݂悤�B
�f�o�b�K�ŃX�^�[�g�A�b�v�̏�����ǂ�
�@�A�ڑ�2��ł̓f�o�b�K�ɂ�铮�I��͂�printf()�̌Ăяo���̐��T�������A�����ł������悤�ɂ��āAmain()���Ă��܂ł̏�����ǂ��Ă݂悤�B
�@�T���v���E�v���O�����ɂ́A�A�ڑ�2��ʼn�͂̑Ώۂɂ������s�t�@�C��hello�����̂܂ܗ��p����B
�Ƃ肠����main()�Ńu���[�N���Ă݂�
�@�܂���hello���w�肵��GDB���N�����āAmain()�Ƀu���[�N�|�C���g���ē�����J�n���悤�B
[user@localhost hello]$ gdb -q hello Reading symbols from /home/user/hello/hello...done. (gdb) break main Breakpoint 1 at 0x80482c5: file hello.c, line 5. (gdb) run Starting program: /home/user/hello/hello Breakpoint 1, main (argc=1, argv=0xbffffc14) at hello.c:5 5 printf("Hello World! %d %s\n", argc, argv[0]); (gdb)
�@main()���̐擪�Ńu���[�N�����B������where�ɂ��A�o�b�N�g���[�X��ǂ��Ă݂悤�B
(gdb) where #0 main (argc=1, argv=0xbffffc14) at hello.c:5 (gdb)
�@������������main()���̌Ăяo�����ƂȂ��Ă�������킩�邩������Ȃ��Ǝv�����̂����A���������킯�ł��Ȃ��悤���B
�@�ǂ̂悤�ɂ���Amain()���̌Ăяo�����ׂ邱�Ƃ��ł��邾�낤���B
�@main()������߂��Ă݂���ǂ����낤���B�T���v���E�v���O�����ł́Amain()�̍Ō��return 0�ŌĂяo�����ɖ߂��Ă���B
�@�܂�next��printf()�̏��������s����B
(gdb) next Hello World! 1 /home/user/hello/hello 6 return 0; (gdb)
�@�uHello World!�v�̃��b�Z�[�W���o�͂���A���s��return�̈ʒu�Ɉړ����Ă���B�����step�ɂ��X�e�b�v���s���Ă݂悤�B
(gdb) step 7 } (gdb) step 0x08048478 in __libc_start_main () (gdb)
�@step��2��s���ƁA__libc_start_main()�Ƃ������ɖ߂����悤���B�\�[�X�R�[�h�͕\������Ȃ��̂ŁA������A�Z���u���Ō��Ă݂悤�B
(gdb) layout asm
�@����Ɛ}5.1�̂悤�ȉ�ʂɂȂ����B
�@�����Ƃ���A�m����__libc_start_main()�Ƃ������ɖ߂��Ă���悤���B
�@�Ƃ������Ƃ͂܂�__libc_start_main()�Ƃ�����������A��������main()���Ă�Ă���Ƃ������Ƃ��낤���H
main()�̌Ăяo������T��
�@__libc_start_main()�Ƀu���[�N�|�C���g�邱�Ƃ͂ł��邾�낤���H����Ă݂悤�B
(gdb) break __libc_start_main Breakpoint 2 at 0x80482fb (gdb)
�@���܂����ꂽ�悤�Ȃ̂ŁA�Ď��s���Ă݂悤�B
�@�A�ڑ�3��ł������������Arun�����s����ƈȉ��̂悤�ɕ������B�v���O���������s���̂��߁u�v���O�������ŏ�������s���邩�H�v�ƕ�����Ă���̂ŁA����ɂ́uy�v���Ă��������B
(gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) Starting program: /home/user/hello/hello Breakpoint 2, 0x080482fb in __libc_start_main () (gdb)
�@__libc_start_main()�ŁA���܂��u���[�N�ł����悤���B�o�b�N�g���[�X�͂ǂ��Ȃ��Ă��邾�낤���B
(gdb) where #0 0x080482fb in __libc_start_main () #1 0x080481e1 in _start () (gdb)
�@���x��_start()�Ƃ��������o�Ă����悤���B
�@_start()�Ƀu���[�N�|�C���g��A������x���s���Ă݂悤�B
(gdb) break _start Breakpoint 3 at 0x80481c0 (gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) Starting program: /home/user/hello/hello Breakpoint 3, 0x080481c0 in _start () (gdb)
�@���܂��u���[�N�ł��Ă���B�o�b�N�g���[�X�����Ă݂悤�B
(gdb) where #0 0x080481c0 in _start () (gdb)
�@�Ƃ��ɉ����o�͂���Ȃ��B��ʂ͐}5.2�̂悤�ɂȂ��Ă���B
�@�A�Z���u���o�͂̉��̂ق���call���߂ɂ��__libc_start_main()���Ăяo����A���̌��hlt�Ƃ������߂��Ă�Ă��邱�Ƃɒ��ڂ��Ăق����B
�@hlt�͂�����HALT���߂Ƃ������̂ŁACPU�̓�����~������̂��B�܂�__libc_start_main()����߂��Ă����ꍇ�ɂ̓v���O�����̓���͒�~����B���̐�̏����͎��s����Ȃ��A�Ƃ������Ƃ��B
�@�Ƃ������Ƃ͂��ꂪ�Amain()���Ăяo�����߂̂������Ƃ̏������낤���B���������v���O���������s�J�n�����ʒu�́A�ǂ����ɏ��Ƃ��Ċi�[����Ă��Ȃ����̂��낤���B
Copyright © ITmedia, Inc. All Rights Reserved.
�֘A�L��
- �v���O���~���O����C�ɂ��Ēm�낤
�v���O���~���O����̊�{�ƂȂ�uC�v�B���������@���@��g�ɕt���悤�BC�ɂ͊m���Ɋw�Ԃ����̉��l������i�ҏW���j - �V�F���R�[�h��͂ɕK�g�́u5����v
�R���s���[�^�E�C���X�̉�͂ȂǂɌ������Ȃ����o�[�X�G���W�j�A�����O�Z�p�ł����A��������������ȁA�Ƃ�����ۂ�����Ă���l�������̂ł͂Ȃ��ł��傤���B���̘A�ڂł́A�u�V�F���R�[�h�v���ɁA���H�`���ł��̊�b���Љ�Ă����܂��B�i�ҏW���j - �y od �z�R�}���h�\�\�t�@�C����8�i����16�i���Ń_���v����
�{�A�ڂ́ALinux�̃R�}���h�ɂ��āA��{��������I�v�V�����A��̓I�Ȏ��s��܂ł��Љ�Ă����܂��B����́A�uod�v�R�}���h�ł��B