我正在考虑使用二进制可执行文件的运行时行为来提取可用编译数据的反编译方法。分析运行时行为(即在每条 cpu 指令后捕获并检查它的作用),我们可以获得很多附加信息,例如:
- 我们可以区分静态常量数据(“
.text
”)和二进制 asm - 附加信息,哪个寄存器或全局/局部变量(指针、浮点数和整数)中的数据类型是什么
- cpu指令开始的地方
- 从堆栈行为中,我们可以获得非常有用的启发式方法,函数/内部函数在哪里以及它们具有多长时间/什么类型的参数。
在我看来,即使是圣杯,可重新编译的源代码也不会那么遥远。
是否可以?是否已经存在能够执行此操作的任何工具/软件?