�v���O�����̎��s�͂ǂ̂悤�ɂ��čs����̂��ALinux�J�[�l���̃R�[�h����T���Fmain()�֐��̑O�ɂ͉�������̂��i�I�j�i1/2 �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�ŏI��́ALinux�J�[�l���̒��ł́A�v���O�����̋N�����ɂ͂ǂ̂悤�ȏ������s���Ă���̂���T��B

» 2017�N07��20�� 05��00�� ���J
[���O���C��]

�A�ږڎ�

n[gHelloCWorldh OSƕWCũVSgƂ

���Ђ̒�����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���u�G���W�j�A�Ȃ�C����v���O�����̏I���ɌĂяo�����exit()�̒��g�������Ă܂���ˁH�v�͂�����

Linux�J�[�l���̏��������Ă݂悤

�@�����܂ł͎��glibc�����ƒX�^�[�g�A�b�v�ƏI�������ɂ‚��Č��Ă����B

�@������OS�J�[�l���̒��ł́A�v���O�����̋N�����ɂ͂ǂ̂悤�ȏ������s���Ă���̂��낤���B

�@�Ⴆ�΃v���O�����̎��s�̓G���g���E�|�C���g����J�n�����A�Ƃ��������������B�Ƃ������Ƃ̓G���g���E�|�C���g��EIP�ɐݒ肵�Ď��s���J�n����悤�ȏ������A�ǂ����ōs���Ă���͂����B

�@����Linux�J�[�l���ł̃v���Z�X�N�����������Ă݂悤�B

�v���O�����̎��s�͂ǂ̂悤�ɂ��čs����̂�

�@���������v���O�����̎��s�́A�ǂ̂悤�ɂ��čs����̂ł��낤���B

�@UNIX���C�N�ȃV�X�e���ł́A�V�����v���Z�X��fork()�ɂ�萶������Aexec()�n�̊֐��ɂ��V���ȃv���O�����ɏ�������邱�ƂŎ��s�����Ƃ����̂���{�`���B�u��{�`�v�ƌ����Ă���̂�vfork()�Ȃǂ̐V���ȃV�X�e���R�[�������邩�炾���A�Ƃ肠�����͋C�ɂ��Ȃ��Ă������낤�B

�@�܂��uexec()�n�v�Ƃ����̂̓v���O���������s���邽�߂̃��C�u�����֐��Ƃ���execlp()��execvp()�Ȃǂ�����A�����𑍏̂��āuexec()�n�v�Ƒ��ɌĂ΂��B�ŏI�I�ɂ�execve�V�X�e���R�[���𔭍s���邽�߁A�V�X�e���R�[���Ƃ��Ă�execve�ɏW�񂳂��B

�@�‚܂�v���O�����̋N����fork��execve�Ƃ�������ɂ���čs����B

�@execve�V�X�e���R�[�������s���ꂽ��A���Ƃ̓J�[�l���̎d�����B�����Ă��̂Ƃ��ɕK�v�ȍ�Ƃ́A�ȉ��̂悤�Ȃ��̂��낤���B

  • ���s�t�@�C����ǂݍ��݁A���z��������Ƀ}�b�s���O����
  • argc/argv[]�ABSS�̏������A�‹��ϐ��̈����n���Ȃǂ��s��
  • ���s�t�@�C����̃G���g���E�|�C���g������s���J�n����

�@�����̏�����OS�̃J�[�l�����s���Ă��邱�ƂɂȂ�B�����Ă��Ƃ���Linux�Ȃ�΁A���̃\�[�X�R�[�h��ǂ߂΁A���ۂɂǂ̂悤�ȏ������s����̂����킩��͂����B

�@�����ł͐V���ȃv���Z�X���J�n���邽�߂́A�J�[�l�������������Ă݂悤�B

execve()�̏���

�@�܂���execve�V�X�e���R�[���̏����֐���T���Ă݂悤�B

�@����̓V�X�e���R�[���E�e�[�u��������΂킩�邾�낤���BLinux�J�[�l���E�\�[�X�R�[�h��arch/x86/kernel/syscall_table_32.S�����Ă݂�ƁA�ȉ��̂悤�ɓo�^����Ă���B

 1:ENTRY(sys_call_table)
...
12:	.long sys_unlink	/* 10 */
13:	.long ptregs_execve
...

�@�V�X�e���R�[���ԍ���11�̂悤���B�����execve �Ō�������ƁAkernel/entry_32.S�Ɉȉ��̂悤�Ȓ�`�����邱�ƂɋC���‚��B

715:/*
716:  * System calls that need a pt_regs pointer.
717:  */
718:#define PTREGSCALL(name) \
719:	ALIGN; \
720:ptregs_##name: \
721:	leal 4(%esp),%eax; \
722:	jmp sys_##name;
...
728:PTREGSCALL(execve)
...

�@ptregs_execve�Ƃ����V���{������`����A��������sys_execve���Ă΂��A�Ƃ������ƂɂȂ�悤���B�‚܂�sys_execve��T���΂������ƂɂȂ�B

�@����̓A�[�L�e�N�`����ˑ������ɂ��邾�낤����A�g�b�v�E�f�B���N�g���t�߂Ō�������΂������낤�c�Ǝv�����̂������ۂɂ���Ă����‚���Ȃ��B�C�����Ȃ�����x86�ˑ����Ō�������ƁAkernel/process_32.c�Ƃ����t�@�C�������‚���Asys_execve()���ȉ��̂悤�ɒ�`����Ă����B

447:/*
448:  * sys_execve() executes a new program.
449:  */
450:int sys_execve(struct pt_regs *regs)
451:{
...
459:	 error = do_execve(filename,
460:			 (char __user * __user *) regs->cx,
461:			 (char __user * __user *) regs->dx,
462:			 regs);
...

�@do_execve()���Ă΂��悤���B�����T���Ă݂�ƁA���x�����A�[�L�e�N�`����ˑ�����fs/exec.c�Ɍ��‚���A�ȉ��̂悤�ɒ�`����Ă����B

1357:/*
1358:  * sys_execve() executes a new program.
1359:  */
1360:int do_execve(char * filename,
1361:	 char __user *__user *argv,
1362:	 char __user *__user *envp,
1363:	 struct pt_regs * regs)
1364:{
...
1426:	 retval = copy_strings(bprm->argc, argv, bprm);
1427:	 if (retval < 0)
1428:		 goto out;
1429:
1430:	 current->flags &= ~PF_KTHREAD;
1431:	 retval = search_binary_handler(bprm,regs);
...

�@copy_strings()�Ƃ����֐��ɂ����argv[]�̏������s���Ă���悤���B

ELF�t�H�[�}�b�g�̃��[�h

�@��n�߂�do_execve()�̏��������Ă݂����A�ʂ̖ڐ������execve()�̏��������Ă݂悤�B

�@���s�t�@�C����ELF�t�H�[�}�b�g�Ƃ����`���ɂȂ��Ă���̂ŁAELF�t�H�[�}�b�g�̉�͏������s���Ă���ӏ�������͂����B�����Ă���̓A�[�L�e�N�`����ˑ����ɂ��邾�낤�B

�@�t�@�C�����Ɂuelf�v���܂ނ悤�ȃt�@�C���͖������낤���B

[user@localhost ~]$ cd linux-2.6.32.65
[user@localhost linux-2.6.32.65]$ ls */*elf*
fs/binfmt_elf.c				lib/locking-selftest-softirq.h
fs/binfmt_elf_fdpic.c			lib/locking-selftest-spin-hardirq.h
fs/compat_binfmt_elf.c			lib/locking-selftest-spin-softirq.h
lib/locking-selftest-hardirq.h		lib/locking-selftest-spin.h
lib/locking-selftest-mutex.h		lib/locking-selftest-wlock-hardirq.h
lib/locking-selftest-rlock-hardirq.h	lib/locking-selftest-wlock-softirq.h
lib/locking-selftest-rlock-softirq.h	lib/locking-selftest-wlock.h
lib/locking-selftest-rlock.h		lib/locking-selftest-wsem.h
lib/locking-selftest-rsem.h		lib/locking-selftest.c
[user@localhost linux-2.6.32.65]$

�@fs/binfmt_elf.c�Ƃ����t�@�C��������炵���v����B

�@������binfmt_elf.c�̒��g�����Ă݂�ƁAload_elf_binary()�Ƃ����֐�������B���O���炵�āA�܂���ELF�t�H�[�}�b�g�̎��s�t�@�C���̃��[�h�����̂悤�Ɏv����B

�@�A�ڑ�8��Ő��������悤�ɁA�v���O�����̎��s��ELF�t�H�[�}�b�g�Ɋ܂܂�Ă���G���g���E�|�C���g����J�n�����B�Ƃ������Ƃ͂��̒��ɁA�G���g���E�|�C���g�������Ă���ӏ�������̂ł͂Ȃ����낤���B

�@�uentry�v�Ƃ����L�[���[�h�Ō�������ƁA�ȉ��̂悤�ȉӏ������‚������B

563:static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
564:{
...
978:		start_thread(regs, elf_entry, bprm->p);
...

�@start_thread()�Ƃ����֐����Ăяo���Ă���B����Ƀ��W�X�^�֘A�炵�������ƁA�G���g���E�|�C���g�̃A�h���X��n���Ă���悤���B

�@�@�@�@�@�@ 1|2 ���̃y�[�W��

Copyright © ITmedia, Inc. All Rights Reserved.

'; this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B