如何在 Windows 上使用内联汇编获取标签的地址?

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

我正在尝试使用 Zig 中的内联 asm 获取标签的地址。

const main_ccb_p1 = core.mainCCCBPtr();
comptime var to_return_label = ".to_return" ++ mangle(function);
asm volatile (
    \\ # save main context
    \\ movq %rbx,  0(%[ctx])    # save rbx
    \\ movq %r12,  8(%[ctx])    # save r12
    \\ movq %r13, 16(%[ctx])    # save r13
    \\ movq %r15, 24(%[ctx])    # save r15
    \\ movq %rsp, 32(%[ctx])    # save rsp
    \\ movq %rbp, 40(%[ctx])    # save rbp
    \\ 
    ++ "movq $" ++ to_return_label ++ ", 48(%[ctx])"
    :
    : [ctx] "{rax}" (&main_ccb_p1.context),
);

// some code
// ...

asm volatile (to_return_label ++ ":" ::: "memory");

在 Linux 上运行良好。但是我在 Windows 上得到了一些奇怪的结果。我期望的地址是

0000 7FFF F661 2D60
,但我得到了
FFFF FFFF F661 2D60
。然后我尝试使用
lea label, %rcx
。结果还是错了
0000 0000 F661 2D60
.

为什么会这样?如何在 Windows 上使用内联汇编获取标签的地址?感谢您的帮助。

assembly x86-64 inline-assembly zig
© www.soinside.com 2019 - 2024. All rights reserved.