ARCH_PRCTL(2) | п═я┐п╨п╬п╡п╬п╢я│я┌п╡п╬ п©я─п╬пЁя─п╟п╪п╪п╦я│я┌п╟ Linux | ARCH_PRCTL(2) |
п≤п°п╞¶
arch_prctl - п╫п╟я│я┌я─п╬п╦я┌я▄ я│п╬я│я┌п╬я▐п╫п╦п╣ п╫п╦я┌п╦ (п╥п╟п╡п╦я│п╦я┌ п╬я┌ п╟я─я┘п╦я┌п╣п╨я┌я┐я─я▀)
п·п▒п≈п·п═¶
#include <asm/prctl.h>
#include <sys/prctl.h> int arch_prctl(int code, unsigned long addr); int arch_prctl(int code, unsigned long *addr);
п·п÷п≤п║п░п²п≤п∙¶
п╓я┐п╫п╨я├п╦я▐ arch_prctl() п╥п╟п╢п╟я▒я┌ я│п╬я│я┌п╬я▐п╫п╦п╣ п©я─п╬я├п╣я│я│п╟ п╦п╩п╦ п╫п╦я┌п╦, п╥п╟п╡п╦я│я▐я┴п╦п╣ п╬я┌ п╟я─я┘п╦я┌п╣п╨я┌я┐я─я▀. п▓ п╟я─пЁя┐п╪п╣п╫я┌п╣ code п╥п╟п╢п╟я▒я┌я│я▐ п©п╬п╢я└я┐п╫п╨я├п╦я▐ п╦ п╣п╧ п©п╣я─п╣п╢п╟я▒я┌я│я▐ п╥п╫п╟я┤п╣п╫п╦п╣ addr; п©п╟я─п╟п╪п╣я┌я─ addr я─п╟я│я│п╪п╟я┌я─п╦п╡п╟п╣я┌я│я▐ п╩п╦п╠п╬ п╨п╟п╨ unsigned long п©я─п╦ п╬п©п╣я─п╟я├п╦я▐я┘ "я┐я│я┌п╟п╫п╬п╡п╨п╦", п╩п╦п╠п╬ п╨п╟п╨ unsigned long * п©я─п╦ п╬п©п╣я─п╟я├п╦я▐я┘ "п©п╬п╩я┐я┤п╣п╫п╦я▐" п╥п╫п╟я┤п╣п╫п╦я▐.
п÷п╬п╢я└я┐п╫п╨я├п╦п╦ п╟я─я┘п╦я┌п╣п╨я┌я┐я─я▀ x86-64:
- ARCH_SET_FS
- пёя│я┌п╟п╫п╬п╡п╦я┌я▄ 64-п╠п╦я┌п╫я┐я▌ п╠п╟п╥я┐ п╢п╩я▐ я─п╣пЁп╦я│я┌я─п╟ FS я─п╟п╡п╫п╬п╧ addr.
- ARCH_GET_FS
- п▓п╣я─п╫я┐я┌я▄ п╥п╫п╟я┤п╣п╫п╦п╣ 64-п╠п╦я┌п╫п╬п╧ п╠п╟п╥я▀ п╢п╩я▐ я─п╣пЁп╦я│я┌я─п╟ FS я┌п╣п╨я┐я┴п╣п╧ п╫п╦я┌п╦ п╡ я▐я┤п╣п╧п╨я┐ п╢п╩п╦п╫п╫п╬п╧ unsigned long, п╥п╟п╢п╟п╫п╫я┐я▌ п╟п╢я─п╣я│п╬п╪ addr.
- ARCH_SET_GS
- пёя│я┌п╟п╫п╬п╡п╦я┌я▄ 64-п╠п╦я┌п╫я┐я▌ п╠п╟п╥я┐ п╢п╩я▐ я─п╣пЁп╦я│я┌я─п╟ GS я─п╟п╡п╫п╬п╧ addr.
- ARCH_GET_GS
- п▓п╣я─п╫я┐я┌я▄ п╥п╫п╟я┤п╣п╫п╦п╣ 64-п╠п╦я┌п╫п╬п╧ п╠п╟п╥я▀ п╢п╩я▐ я─п╣пЁп╦я│я┌я─п╟ GS я┌п╣п╨я┐я┴п╣п╧ п╫п╦я┌п╦ п╡ я▐я┤п╣п╧п╨я┐ п╢п╩п╦п╫п╫п╬п╧ unsigned long, п╥п╟п╢п╟п╫п╫я┐я▌ п╟п╢я─п╣я│п╬п╪ addr.
п▓п·п≈п▓п═п░п╘п░п∙п°п·п∙ п≈п²п░п╖п∙п²п≤п∙¶
п÷я─п╦ я┐я│п©п╣я┬п╫п╬п╪ п╡я▀п©п╬п╩п╫п╣п╫п╦п╦ arch_prctl() п╡п╬п╥п╡я─п╟я┴п╟п╣я┌ 0; п©я─п╦ п╬я┬п╦п╠п╨п╣ — -1, п╟ п╡ errno п╥п╟п╢п╟я▒я┌я│я▐ п©я─п╦я┤п╦п╫п╟ п╬я┬п╦п╠п╨п╦.
п·п╗п≤п▒п п≤¶
- EFAULT
- п▓ addr п╥п╟п╢п╟п╫ п╫п╣ п╡я▀п╢п╣п╩п╣п╫п╫я▀п╧ п╟п╢я─п╣я│ п╦п╩п╦ п╡п╫п╣ п╟п╢я─п╣я│п╫п╬пЁп╬ п©я─п╬я│я┌я─п╟п╫я│я┌п╡п╟ п©я─п╬я├п╣я│я│п╟.
- EINVAL
- code п╫п╣ я▐п╡п╩я▐п╣я┌я│я▐ п╢п╬п©я┐я│я┌п╦п╪п╬п╧ п©п╬п╢п╨п╬п╪п╟п╫п╢п╬п╧.
- EPERM
- addr п╩п╣п╤п╦я┌ п╡п╫п╣ п╟п╢я─п╣я│п╫п╬пЁп╬ п©я─п╬я│я┌я─п╟п╫я│я┌п╡п╟ п©я─п╬я├п╣я│я│п╟.
п║п·п·п╒п▓п∙п╒п║п╒п▓п≤п∙ п║п╒п░п²п■п░п═п╒п░п°¶
arch_prctl() я▐п╡п╩я▐п╣я┌я│я▐ я─п╟я│я┬п╦я─п╣п╫п╦п╣п╪ Linux/x86-64 п╦ п╫п╣ п╢п╬п╩п╤п╫п╟ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄я│я▐ п╡ п©п╣я─п╣п╫п╬я│п╦п╪я▀я┘ п©я─п╬пЁя─п╟п╪п╪п╟я┘.
п≈п░п°п∙п╖п░п²п≤п╞¶
п▓ п╫п╟я│я┌п╬я▐я┴п╣п╣ п╡я─п╣п╪я▐ arch_prctl() п©п╬п╢п╢п╣я─п╤п╦п╡п╟п╣я┌я│я▐ я┌п╬п╩я▄п╨п╬ п╫п╟ Linux/x86-64 п╢п╩я▐ 64-п╠п╦я┌п╫я▀я┘ п©я─п╬пЁя─п╟п╪п╪.
64-п╠п╦я┌п╫п╟я▐ п╠п╟п╥п╟ п╦п╥п╪п╣п╫я▐п╣я┌я│я▐ п©я─п╦ п╥п╟пЁя─я┐п╥п╨п╣ п╫п╬п╡п╬пЁп╬ 32-п╠п╦я┌п╫п╬пЁп╬ я│п╣пЁп╪п╣п╫я┌п╫п╬пЁп╬ я│п╣п╩п╣п╨я┌п╬я─п╟.
ARCH_SET_GS п╡я▀п╨п╩я▌я┤п╣п╫п╟ п╡ п╫п╣п╨п╬я┌п╬я─я▀я┘ я▐п╢я─п╟я┘.
п÷п╣я─п╣п╨п╩я▌я┤п╣п╫п╦п╣ п╨п╬п╫я┌п╣п╨я│я┌п╬п╡ п╢п╩я▐ 64-п╠п╦я┌п╫я▀я┘ я│п╣пЁп╪п╣п╫я┌п╫я▀я┘ п╠п╟п╥ — п╢п╬п╡п╬п╩я▄п╫п╬ п╥п╟я┌я─п╟я┌п╫п╟я▐ п╬п©п╣я─п╟я├п╦я▐. п°п╬п╤п╣я┌ п╬п╨п╟п╥п╟я┌я▄я│я▐ п╠я▀я│я┌я─п╣п╣ п╥п╟п╢п╟я┌я▄ 32-п╠п╦я┌п╫я┐я▌ п╠п╟п╥я┐ я│ п©п╬п╪п╬я┴я▄я▌ я│п╣пЁп╪п╣п╫я┌п╫п╬пЁп╬ я│п╣п╩п╣п╨я┌п╬я─п╟, п╫п╟я│я┌я─п╬п╦п╡ LDT я│ п©п╬п╪п╬я┴я▄я▌ modify_ldt(2) п╦п╩п╦ п╦я│п©п╬п╩я▄п╥я┐я▐ я│п╦я│я┌п╣п╪п╫я▀п╧ п╡я▀п╥п╬п╡ set_thread_area(2), п©п╬я▐п╡п╦п╡я┬п╦п╧я│я▐ п╡ kernel 2.5 п╦п╩п╦ п╫п╬п╡п╣п╣. arch_prctl() п╫я┐п╤п╫п╟ я┌п╬п╩я▄п╨п╬ п╨п╬пЁп╢п╟ п╡я▀ я┘п╬я┌п╦я┌п╣ п╥п╟п╢п╟я┌я▄ п╠п╟п╥я▀, п╨п╬я┌п╬я─я▀п╣ п╠п╬п╩п╣п╣ 4п⌠п▒. п÷п╟п╪я▐я┌я▄ п╡ п©п╣я─п╡я▀я┘ 2п⌠п▒ п╟п╢я─п╣я│п╫п╬пЁп╬ п©я─п╬я│я┌я─п╟п╫я│я┌п╡п╟ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╡я▀п╢п╣п╩п╣п╫п╟ я┤п╣я─п╣п╥ mmap(2) я│ я└п╩п╟пЁп╬п╪ MAP_32BIT.
п▓ glibc п╡п╣я─я│п╦п╦ 2.7 п╫п╣я┌ п©я─п╬я┌п╬я┌п╦п©п╟ п╢п╩я▐ arch_prctl(). п▓п╟п╪ п╫я┐п╤п╫п╬ п╬п╠я┼я▐п╡п╩я▐я┌я▄ п╣пЁп╬ я│п╟п╪п╬я│я┌п╬я▐я┌п╣п╩я▄п╫п╬. п╜я┌п╬ п╪п╬п╤п╣я┌ п╠я▀я┌я▄ п╦я│п©я─п╟п╡п╩п╣п╫п╬ п╡ п╫п╬п╡я▀я┘ п╡п╣я─я│п╦я▐я┘ glibc.
FS я┐п╤п╣ п╪п╬п╤п╣я┌ п╦я│п©п╬п╩я▄п╥п╬п╡п╟я┌я▄я│я▐ п╠п╦п╠п╩п╦п╬я┌п╣п╨п╬п╧ п╫п╦я┌п╣п╧.
п║п°п·п╒п═п≤п╒п∙ п╒п░п п√п∙¶
mmap(2), modify_ldt(2), prctl(2), set_thread_area(2)
п═я┐п╨п╬п╡п╬п╢я│я┌п╡п╬ п©я─п╬пЁя─п╟п╪п╪п╦я│я┌п╟ п╢п╩я▐ AMD X86-64
2007-12-26 | Linux |