我正在阅读这个问题,因为我试图在C++程序中找到一个函数的大小,暗示可能有一种特定于平台的方法.我的目标平台是windows
我目前掌握的方法如下:
1.获取指向函数
的指针2.递增指针(和计数器),直到达到3的机器代码值ret
.计数器将是函数的大小?
编辑1:澄清我的意思'大小'我的意思是组成函数的字节数(机器代码).
编辑2:有一些评论询问为什么或我打算用这个做什么.诚实的答案是我没有意图,我无法真正看到了解函数长度预编译时间的好处.(虽然我确定有一些)
这对我来说似乎是一种有效的方法,这会有用吗?
假设我有如下函数:
# cat 003.c
int foo(int a, int b)
{
return a+b;
}
Run Code Online (Sandbox Code Playgroud)
并像这样编译它:
gcc -S 003.c
Run Code Online (Sandbox Code Playgroud)
得到以下汇编结果:
.file "003.c"
.text
.globl foo
.type foo, @function
foo:
.LFB2:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
movl %edi, -4(%rbp)
movl %esi, -8(%rbp)
movl -8(%rbp), %edx
movl -4(%rbp), %eax
addl %edx, %eax
leave
ret
.LFE2:
.size foo, .-foo /* size of the function foo, how to get it?*/
Run Code Online (Sandbox Code Playgroud)
上面的最后一行确实得到了函数的大小.编译器在哪里存储大小?我可以使用C或内联asm在我的原始C程序中以某种方式获取函数的大小吗?
如何打印任何功能的大小?这个问题被问到但答案不是粒子.根据之前的回答不同,当我使用内置函数来查找函数的大小时?
#include<stdio.h>
void print(void)
{
printf("i m in print \n");
}
int main()
{
printf("%d\n",(int)main-(int)print); // o/p is 20 byte what is this 20
//is size of function?previous asked answer
printf("size=%d\n",sizeof(print));// o/p is 1 byte ? how to get exact plz help?
}
Run Code Online (Sandbox Code Playgroud)
〜