void* curbrk;
__asm__ __volatile__(
"mov .curbrk, %%rax;"
"mov %%rax, %0"
: "=r" (curbrk)
:: "%rax"
);
任何人都可以解释这个简单的汇编代码的作用吗?感谢。
答案 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