Assembly 如何在编译时获取标签的地址

Assembly 如何在编译时获取标签的地址,assembly,nasm,Assembly,Nasm,有没有办法让Nasm告诉你特定标签的地址?比如说 ; blah blah blah... _routine: ; do some stuff ; blah blah blah 我想知道编译时\u例程的地址是什么。换句话说,我个人想知道地址是什么(而不是让程序中的值可以访问)。啊,你可以在你的源文件(疯狂的nasm…)中加入这一点魔力 您应该能够使用标签的名称。NASM中的标签将自动视为地址 因此: mov rax,label_name 应该会给你地址。[map…

有没有办法让Nasm告诉你特定标签的地址?比如说

 ; blah blah blah...

 _routine:
     ; do some stuff

 ; blah blah blah  

我想知道编译时
\u例程
的地址是什么。换句话说,我个人想知道地址是什么(而不是让程序中的值可以访问)。

啊,你可以在你的源文件(疯狂的nasm…)中加入这一点魔力


您应该能够使用标签的名称。NASM中的标签将自动视为地址

因此:

 mov   rax,label_name

应该会给你地址。

[map…]
仅在
-f bin
模式下工作(通常是链接器功能)。列表文件可能有助于<代码>-l myfile.lst。聚会时的地址通常不是一个有趣的数字…谢谢你的提示
bin
对我来说很好,但对其他人来说可能不行。我正在用
qemu
开发一个引导加载程序/内核,还没有发现有任何运气将调试信息加载到
gdb
中。我需要标签的地址以便设置断点。@brianmearns,那么ypu在您的asm代码中添加了什么?因为我最近也遇到了同样的问题抱歉@Elvin,这是几年前的事了,我几乎再也不能理解我的问题了,更不用说记得我是如何解决的了=/祝你好运!谢谢,但我想我还不够清楚。我的意思是我需要知道地址,而不仅仅是我的程序。我将编辑我的问题以使其更清楚。将标签声明为public或global,并将其显示在地图或链接器文件中。或者你可以使用我上面写的东西,然后在开机时打印到屏幕上。你不知道你的代码将在哪个地址加载。因此,您可以得到的最好结果是标签的RVA(相对虚拟地址)-即模块起始地址的偏移量。对于这些,请生成映射文件并参见。要出现在映射文件中,标签必须是全局可见的(即导出)。这对于某些输出格式来说是一个好的观点,但我正在生成
bin
格式,因此它知道模块的起始地址(通过
org
指令),映射文件生成正确的绝对地址(虚拟或物理地址无关)。此外,似乎没有任何要求将标签专门标记为导出或全局:所有我的标签(甚至嵌套的标签)都显示在地图文件中。
 mov   rax,label_name