如何在GNU汇编程序中使用Intel语法获取函数的大小(以字节为单位)?

问题描述 投票:1回答:1

我需要在汇编时计算函数的大小(以字节为单位)。我尝试了各种方法,包括:

.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_echk0_s分别是表示函数结束和开始的两个标签。

有任何想法吗?

linux x86 gas
1个回答
1
投票

在将地址用作立即数时,您只需要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是如何定义的。

© www.soinside.com 2019 - 2024. All rights reserved.