Linux reboot () 시스템 호출의 매직 넘버
Linux 프로그래밍 인터페이스 에는 다음과 같은 3 장의 연습이 있습니다.
Linux 전용 reboot () 시스템 호출을 사용하여 시스템을 재부팅하는 경우 두 번째 인수 magic2를 매직 번호 집합 중 하나로 지정해야합니다 (예 : LINUX_REBOOT_MAGIC2). 이 숫자의 의미는 무엇입니까? (16 진수로 변환하면 단서가 제공됩니다.)
man 페이지는 magic2
LINUX_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
'Development Tip' 카테고리의 다른 글
SortedList를 사용하는 경우 (0) | 2020.11.24 |
---|---|
목록의 요소를 별도의 블록으로 끌어서 놓기 (0) | 2020.11.24 |
Matplotlib-각 빈에 레이블 지정 (0) | 2020.11.24 |
여러 열을 사용하는 Pandas DataFrame 집계 함수 (0) | 2020.11.24 |
SQL 분할 값을 여러 행으로 (0) | 2020.11.24 |