函数相关特性与参数传递方法解析
函数特性
- 连续函数关联
在代码分析中,如果看到两个或多个连续的函数,通常意味着它们位于同一个源代码文件中(除非处于两个目标文件的边界)。这表明这些函数有一定的共性,比如来自同一 API 级别或同一库。例如,在搜索与 Twofish 相关的函数时,找到Twofish::Base::UncheckedSetKey()
函数后,查看twofish.cpp
源代码发现所有相关函数都在该模块中,随后尝试其后续函数,找到了Twofish::Enc::ProcessAndXorBlock()
和Twofish::Dec::ProcessAndXorBlock()
。 - 微小函数优化
像空函数或仅返回 “true”(1)或 “false”(0)的微小函数很常见。几乎所有不错的编译器倾向于在生成的可执行代码中只保留一个这样的函数,即使源代码中有多个类似函数。所以,当看到一个仅由mov eax, 1 / ret
组成且被多处引用(可调用)的微小函数时,这可能是编译器优化的结果。 - C++ RTTI 数据
RTTI(运行时类型信息)数据可用于 C++ 类的识别。 - 故意崩溃调试
有时需要知道哪些函数被执行,哪些未被执行。在没有合适调试器的特殊架构中,最简单的方法是插入无效操作码或