Вот функция:
void func(char *ptr)
{
*ptr = 42;
}
Вот вывод (обрезка) функции g cc -S. c:
func:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movb $42, (%rax)
nop
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
Я могу использовать эту функцию как :
func(malloc(1));
или как:
char local_var;
func(&local_var);
Вопрос в том, как процессор определяет, какой регистр сегмента должен использоваться для преобразования действительного адреса в виртуальный в этой инструкции (это может быть DS, а также SS)
movb $42, (%rax)
У меня есть x86_64 pro c.