我需要在汇编时计算函数的大小(以字节为单位)。我尝试了各种方法,包括:
.set chk0_sz, offset chk0_e - offset chk0_s
然后使用mov rcx, offset chk0_sz
获取值。
但是,它给出了错误:
error: cannot use more than one symbol in memory operand
。
这里chk0_e
和chk0_s
分别是表示函数结束和开始的两个标签。
有任何想法吗?
在将地址用作立即数时,您只需要offset
关键字。在其他情况下,如数据,无论如何都不能解除引用,因此符号是地址。
编译器通常使用像.size chk0, . - chk0
这样的东西。所以你可能想要
.equ chk0_sz, . - chk0 # at the end of chk0
.
是当前位置,如果你将chk0_e
放在那个位置,它将替换使用.equ
。
显然你不能使用rcx
(寄存器)作为汇编时间常数计算的一部分。或者你的意思是mov rcx, offset chk0_sz
使用的大小?
如果你用.equ
将它定义为汇编时常数,你只需要做mov ecx, chk0_sz
。 MASM风格的语法是不一致的,因此这是一个mov-immediate而不是加载,因为chk0_sz
是如何定义的。