【发布时间】:2016-08-19 23:51:02
【问题描述】:
如何获取标签的地址?
我想在不添加额外代码的情况下获取平面汇编器中标签的地址
示例:
label1: ;is at adress 0
db 1h,2h,3h,4h,5h ;some data
label2: is at address 5 because label1 has 5 bytes of data
我可以将地址打印到控制台屏幕,但这会增加程序的大小并改变结果。
我知道只使用标签,但我想要原始地址号码。
【问题讨论】:
-
使用调试器或类似
objdump的工具从符号表中获取地址。如果您不使用标签地址,则它们不会存储在符号表之外的任何位置(例如,作为跳转目标、加载/存储地址、立即操作数或作为数据(例如.dd label2)。 -
好的。还有时间修改我的第一条评论并删除现在已经过时的评论。注意
label1和label2之间有5个字节的数据会更准确;标签没有关联的大小(除非您使用 MASM 或 TASM,其中标签后面的 db/dw/dd 神奇地暗示了在内存操作数中使用该标签的指令的操作数大小)。 -
总之,澄清一下,您不想将地址放入寄存器或程序内部的内存中,对吧?您希望它以某种方式打印在屏幕上,与运行程序分开?
-
是的,这正是我想要的
-
公开标签,生成目标文件而不是可执行文件,使用链接器创建可执行文件并让链接器生成映射文件。该地图文件会告诉您标签的地址。