Development Tip

Linux reboot () 시스템 호출의 매직 넘버

yourdevel 2020. 11. 24. 20:00
반응형

Linux reboot () 시스템 호출의 매직 넘버


Linux 프로그래밍 인터페이스 에는 다음과 같은 3 장의 연습이 있습니다.

Linux 전용 reboot () 시스템 호출을 사용하여 시스템을 재부팅하는 경우 두 번째 인수 magic2를 매직 번호 집합 중 하나로 지정해야합니다 (예 : LINUX_REBOOT_MAGIC2). 이 숫자의 의미는 무엇입니까? (16 진수로 변환하면 단서가 제공됩니다.)

man 페이지는 magic2LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448) 또는 LINUX_REBOOT_MAGIC2C (537993216) 중 하나 일 수 있다고 알려줍니다 . 나는 그 의미를 16 진수로 해독하지 못했습니다. 나는 또한 /usr/include/linux/reboot.h도움이되는 코멘트를주지 않는를 보았다 .

그런 다음 커널의 소스 코드에서 sys_reboot의 정의 를 검색했습니다 . 내가 찾은 것은 헤더 파일의 선언뿐이었습니다.

따라서 첫 번째 질문은이 숫자의 의미가 무엇입니까? 두 번째 질문은 sys_reboot의 정의 는 어디에 있으며 어떻게 찾았습니까?

편집 :에서 정의를 찾았습니다 kernel/sys.c. 나는 단지에 대해 grepped sys_reboot하고 MAGIC 번호에 대해 grep하는 것을 잊었다. 나는 내가 바라 보았다 그래서 정의는, 일부 매크로 마술 뒤에 숨겨진해야 생각 System.map파일에서 /boot, 그리고 다음에 그것을 발견 ctrl_alt_del. 그런 다음 해당 기호를 그 리핑하여 올바른 파일로 이동했습니다. 소스 코드에서 커널을 컴파일했다면 심볼을 정의한 객체 파일을 찾아서 거기에서 이동할 수 있습니다.


추측이지만, 그 숫자는 16 진수로 더 흥미로워 보입니다.

672274793 = 0x28121969
 85072278 = 0x05121996
369367448 = 0x16041998
537993216 = 0x20112000

개발자 또는 개발자의 자녀 생일?

syscall 구현을 찾는 것과 관련 git grep -n LINUX_REBOOT_MAGIC2하여 커널 /sys.c에서 정의를 찾았습니다. 기호 sys_reboot는 구 SYSCALL_DEFINE4(reboot, ...빈스에 의해 생성 된 것 같습니다 .


Linus Torvalds (Linux 커널 및 Git 버전 제어 개발자)와 그의 세 딸의 생일입니다. 시스템을 재부팅하는 매직 넘버로 작동합니다.

http://en.wikipedia.org/wiki/Linus_Torvalds

참고 URL : https://stackoverflow.com/questions/4808748/magic-numbers-of-the-linux-reboot-system-call

반응형