首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$$在纳斯达克的真正含义是什么?

$$在纳斯达克的真正含义是什么?
EN

Stack Overflow用户
提问于 2013-02-18 02:46:07
回答 1查看 5K关注 0票数 4

$$定义为当前段地址。但它的真正意义是什么?我编写了两个asm文件来测试它:

a.asm

代码语言:javascript
复制
extern another

[section .text]
global _start
_start:
    mov ebx, $$
    call another

b.asm

代码语言:javascript
复制
[section .text]
global another
another:
    mov eax, $$
    ret

编译

代码语言:javascript
复制
nasm -f elf a.asm -g
nasm -f elf b.asm -g
ld -o test a.o b.o

使用gdb调试最终文件test,我发现尽管我定义了两个名称相同的部分,但$$在这两个文件中是不同的。所以我猜:

  1. 一旦我在文件中定义了一个节,$$的值就是该节的起始地址。$$与所谓的段寄存器(cs,ss,fs,gs,.etc)无关.
  2. 如果我在其他文件中使用相同的名称定义了另一个节,那么它将被解释为一个不同的节。但是,如果在同一个文件中定义了两个名称相同的节,那么无论它们之间是否存在其他节定义,它总是被解释为相同的部分,具有相同的$$值。如下所示,两个.text部分是相同的。 .text全局_start _start: mov ebx,$$节.d d: mov ecx,$$节.text
  3. 我想有一些节名,NASM可以识别,并在编译时把它们放在正确的位置。比如.data,那么这些节名是什么,NASM可以识别它们并对它们做些什么?非常感谢!
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-18 09:36:29

$$是当前部分开头的地址。它是一个可重定位的值(不是“标量”-您将在错误消息中找到一个单词,但在“手册”中找不到)。这是一个偏移量,所以不关心段寄存器中的内容。

关于它唯一有用的东西是$ - $$,到目前为止这一节的长度。$ - $$是一个“标量”(就像标签之间的任何区别一样),可以在表达式中使用,否则会导致纳萨抱怨“不是标量值”。

名为"-f obj“的部分名称取决于输出格式--”obj“根本不知道任何输出格式。.text.data.bss非常通用--一些输出格式了解其他格式。找到它们最好的地方是手册中的“输出格式”章节。如果下载时没有得到手册,请使用http://www.nasm.us。这些名称区分大小写,并且是前面的‘。是必需的。

我觉得这里有个“问题”,我错过了。你到底想做什么?

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14928741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档