$$定义为当前段地址。但它的真正意义是什么?我编写了两个asm文件来测试它:
a.asm
extern another
[section .text]
global _start
_start:
mov ebx, $$
call anotherb.asm
[section .text]
global another
another:
mov eax, $$
ret编译
nasm -f elf a.asm -g
nasm -f elf b.asm -g
ld -o test a.o b.o使用gdb调试最终文件test,我发现尽管我定义了两个名称相同的部分,但$$在这两个文件中是不同的。所以我猜:
$$的值就是该节的起始地址。$$与所谓的段寄存器(cs,ss,fs,gs,.etc)无关.$$值。如下所示,两个.text部分是相同的。
.text全局_start _start: mov ebx,$$节.d d: mov ecx,$$节.text.data,那么这些节名是什么,NASM可以识别它们并对它们做些什么?非常感谢!发布于 2013-02-18 09:36:29
$$是当前部分开头的地址。它是一个可重定位的值(不是“标量”-您将在错误消息中找到一个单词,但在“手册”中找不到)。这是一个偏移量,所以不关心段寄存器中的内容。
$$通常与$一起使用)。关于它唯一有用的东西是$ - $$,到目前为止这一节的长度。$ - $$是一个“标量”(就像标签之间的任何区别一样),可以在表达式中使用,否则会导致纳萨抱怨“不是标量值”。
名为"-f obj“的部分名称取决于输出格式--”obj“根本不知道任何输出格式。.text、.data和.bss非常通用--一些输出格式了解其他格式。找到它们最好的地方是手册中的“输出格式”章节。如果下载时没有得到手册,请使用http://www.nasm.us。这些名称区分大小写,并且是前面的‘。是必需的。
我觉得这里有个“问题”,我错过了。你到底想做什么?
https://stackoverflow.com/questions/14928741
复制相似问题