如何指定应使用哪个段寄存器(x86)

问题描述 投票:0回答:1

这里是一个功能:

void    func(char *ptr)
{
    *ptr = 42;
}

这是gcc -S function.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进程。

[这里是一个函数:void func(char * ptr){* ptr = 42; }这是gcc -S函数的输出(剪切)。c:func:.LFB0:.cfi_startproc pushq%rbp .cfi_def_cfa_offset 16 ....

memory-management x86 x86-64 addressing-mode memory-segmentation
1个回答
1
投票

默认细分为DS;这就是您的示例中处理器使用的方式。

© www.soinside.com 2019 - 2024. All rights reserved.