gpt4 book ai didi

c - 此汇编代码的说明

转载 作者:行者123 更新时间:2023-12-04 10:10:01 25 4
gpt4 key购买 nike

void* curbrk;

__asm__ __volatile__(
"mov .curbrk, %%rax;"
"mov %%rax, %0"
: "=r" (curbrk)
:: "%rax"
);

谁能解释一下这段简单的汇编代码的作用?谢谢。

最佳答案

它将符号 .curbrk 的值复制到 C 变量 curbrk 中,该符号可能在汇编或链接描述文件的某处定义,破坏了 RAX注册过程中。

.curbrk 可能指向数据段的当前结尾。 Glibc 似乎定义了一个类似的符号 __curbrk,您可能正在使用其他一些 libc(BSD?)。在任何情况下,sbrk(0) 都是一种更便携的访问该值的方式。

查看 FreeBSD 交叉引用后,我可以说它确实指向数据段的当前末尾:brk() 中都使用了它。和 sbrk() , 使用 HIDENAME宏添加一个 .,它出现在 amd64's System.map 上(在当前的 FreeBSD 上不再适用)。

但是请注意,在较新的 FreeBSD 中,brk()sbrk() 已被重新实现,不再依赖于 .curbrk ,它是从 _end 初始化的,它应该来自可执行文件,但是在混合 LLVM 的 ld 和 GNU ld 时出现了问题。所以brk()sbrk()现在使用内核初始化其内部的curbrk,不再依赖于_end。参见 FreeBSD PR228754了解详情。

关于c - 此汇编代码的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6210685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com