c++ - 获取 C++ 函数的大小

标签 c++ windows code-size

我正在阅读 this问题是因为我试图在 C++ 程序中找到函数的大小,它暗示可能有一种特定于平台的方法。我的目标平台是windows

目前我脑子里的方法是这样的:
1.获取函数指针
2. 增加指针(和计数器)直到我达到ret
的机器代码值 3.计数器大小的函数?

Edit1:为了阐明我所说的“大小”是什么意思,我指的是构成函数的字节数(机器代码)。
Edit2: 有一些评论询问我为什么要这样做,或者我打算用它做什么。诚实的回答是我无意,而且我真的看不到了解函数预编译时间长度的好处。 (虽然我确定有一些)

这对我来说似乎是一种有效的方法,它会起作用吗?

最佳答案

哇,我一直在使用函数大小计数,它有很多很多用途。可靠吗?不可能。它是标准的c++吗?不可能。但这就是为什么每次发布新版本时都需要在反汇编程序中检查它以确保它有效。编译器标志可能会打乱顺序。

static void funcIwantToCount()
{
   // do stuff
}
static void funcToDelimitMyOtherFunc()
{
   __asm _emit 0xCC
   __asm _emit 0xCC
   __asm _emit 0xCC
   __asm _emit 0xCC
}

int getlength( void *funcaddress )
{
   int length = 0;
   for(length = 0; *((UINT32 *)(&((unsigned char *)funcaddress)[length])) != 0xCCCCCCCC; ++length);
   return length;
}

它似乎更适合静态函数。全局优化可以杀死它。

附言我讨厌人们问你为什么要这样做,这是不可能的,等等。请停止问这些问题。让你听起来很愚蠢。程序员经常被要求做非标准的事情,因为新产品几乎总是突破现有产品的极限。如果他们不这样做,那么您的产品可能是对已经完成的工作的翻版。无聊!!!

关于c++ - 获取 C++ 函数的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29582045/

相关文章:

c++ - 允许编译器优化异常抛出吗?

assembly - rax=1 的最短 Intel x86-64 操作码?

c++ - 获取 C++ 函数的大小

c - 在 Code Composer Studio 编译器中禁用 64 位除法

c++ - std::rethrow_exception 和抛出的异常类型

c++ - 将非类库分离为 header 和实现的方法

c++ - 一般来说,处理虚假唤醒的正确方法是什么?

windows - 在 Windows 7 上使用 Node 0.12.2 和 npm 2.7.4 ionic 安装错误

c - 将 Windows 套接字用于新进程 I/O

windows - 脚本在Visual Studio中工作,但从批处理文件运行时却不能