Я читаю , как работает защита указателя, и смотрю на glib c макрос , который это делает :
# define PTR_MANGLE(var) asm ("xor %%fs:%c2, %0\n" \
"rol $2*" LP_SIZE "+1, %0" \
: "=r" (var) \
: "0" (var), \
"i" (offsetof (tcbhead_t, \
# define PTR_DEMANGLE(var) asm ("ror $2*" LP_SIZE "+1, %0\n" \
"xor %%fs:%c2, %0" \
: "=r" (var) \
: "0" (var), \
"i" (offsetof (tcbhead_t, \
pointer_guard)))
Синтаксис немного крипти c, поэтому мне трудно понять, как PTR_DEMANGLE
в конечном итоге создает ассемблерный код, подобный этому:
ror rdx,0x11
xor rdx,QWORD PTR fs:0x30
call rdx
Как здесь работает подстановка строк? Что означает :
в этом контексте? (Я не вижу условного присвоения?)