Function entry detection is critical for security of binary code. Conventional methods heavily rely on patterns, inevitably missing true functions and introducing errors. Recently, call frames have been used in exception-handling for function start detection. However, existing methods have two problems. First, they combine call frames with heuristic-based approaches, which often brings error and uncertain benefits. Second, they trust the fidelity of call frames, without handling the errors that are introduced by call frames. In this paper, we first study the coverage and accuracy of existing approaches in detecting function starts using call frames. We found that recursive disassembly with call frames can maximize coverage, and using extra heuristic-based approaches does not improve coverage and actually hurts accuracy. Second, we unveil call-frame errors and develop the first approach to fix them, making their use more reliable.
翻译:函数输入检测对于二进制代码的安全至关重要。 常规方法在很大程度上依赖模式, 不可避免地缺失真实功能并引入错误。 最近, 调用框架被用于例外处理功能启动检测。 但是, 现有方法有两个问题 。 首先, 它们将调用框架与基于通勤的方法结合起来, 通常会带来错误和不确定的好处 。 其次, 它们信任调用框架的忠贞, 而不处理调用框架引入的错误 。 在本文中, 我们首先研究现有调用功能方法的覆盖面和准确性, 开始使用调用框架 。 我们发现, 调用框架的反复分离可以最大限度地扩大覆盖面, 使用额外的超常化方法不会改善覆盖面, 实际上会伤害准确性 。 其次, 我们公布调用框架错误, 并开发第一个修补错误的方法, 使其更加可靠 。