c - 逆向工程 "compiled"Perl vs. C?

标签 c perl reverse-engineering code-access-security

有一个客户声称编译的 C 比 sudo“编译的”Perl 字节码等更难逆向工程。任何人都有办法证明或反驳这一点?

最佳答案

我对 perl 了解不多,但我会举一些例子,为什么逆向编译成汇编的代码如此丑陋。

逆向工程 C 代码最丑陋的地方是编译会删除所有类型信息。这种完全缺乏名称和类型是 IMO 最糟糕的部分。
在动态类型语言中,编译器需要保留更多相关信息。特别是字段/方法/...的名称,因为这些通常是字符串,不可能找到所有用途。

还有很多其他丑陋的东西。比如整个程序优化每次都使用不同的寄存器来传递参数。函数被内联,因此一个简单的函数出现在许多地方,由于优化通常以略有不同的形式出现。

堆栈上的相同寄存器和字节被函数内的不同内容重用。堆栈上的数组变得特别难看。因为您无法知道数组的大小和结束位置。

然后是微优化,这可能会很烦人。例如,我曾经花费超过 15 分钟来反转一个曾经类似于 return x/1600 的简单函数。因为编译器认为除法很慢,并将除法重写为几个乘法加法和按位运算。

关于c - 逆向工程 "compiled"Perl vs. C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5278036/

相关文章:

控制台输出未对齐

c++ - 如何通过按位运算在 double 之间执行求和

Perl 高亮引号分隔符问题 - 在哪里可以找到解决此问题的语法/perl.vim?

assembly - 如何找到具有负偏移量的基址结构地址

我们可以使用数组的表示法来表示 malloc 分配的内存吗?

python - 在 Python 和 C 之间实现回调

perl - Perl 是编译型编程语言还是解释型编程语言?

macos - 在 Inline::C 中链接 macOS 的框架

android - 逆向工程 Proguarded-apk

reverse-engineering - 可执行部分标志