此汇编代码的说明

时间:2011-06-02 05:13:14

标签: c assembly

void* curbrk;

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

任何人都可以解释这个简单的汇编代码的作用吗?感谢。

2 个答案:

答案 0 :(得分:3)

它将符号.value的值(可能是在程序集或链接描述文件中定义)复制到C变量curbrk中,在过程中复制RAX寄存器。

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

在查看FreeBSD交叉引用之后,我可以说它确实指向数据段的当前末尾:使用brk()宏在sbrk()HIDENAME中使用它预先添加.,它出现在amd64's System.map上(是FreeBSD的链接描述文件的版本吗?)。

答案 1 :(得分:0)

将值从%%rax标签或变量复制到.curbrk