Y86 和程序混淆

Posted

技术标签:

【中文标题】Y86 和程序混淆【英文标题】:Y86 Sum program confusion 【发布时间】:2014-10-05 06:41:24 【问题描述】:

我对计算机体系结构教科书中的这个示例程序感到困惑。

这是 C 代码...

这是生成的 Y86 代码...

我的问题是 0x046

mrmovl 8(%ebp), %ecx

为什么将 Start 设置为堆栈指针前面的 8 个字节?我想我对一切都在哪里感到困惑。就像堆栈正在查看 0x100 一样,为什么 %ecx 被设置为距离那里 8 个字节,然后当 Count 已经被设置为距离 %ebp 12 个字节时增加 4?我对堆栈指针到底在看什么的理解可能是错误的。

【问题讨论】:

【参考方案1】:

代码按以下顺序将东西压入堆栈:

Count (4) Start (array) 返回%eip(由call隐式推送); %ebp

然后代码将%ebp 设置为%esp,堆栈如下所示:

(您主要对标有%EBP及以上的部分感兴趣。)

希望这可以澄清事情。你可以阅读更多here。

【讨论】:

哦,我想我明白了,所以由于 *Start 是要推送到堆栈的第三个最新的东西,我们需要越过最新的和第二个最新的东西(每个 4 个字节)才能到达*Start 字节的开始。 *Start 字节包含数组的地址,that 是递增 4 的内容。还有一件事,在程序结束时,他们将 Stack 设置为 .pos 100。假设你按下 4字节到堆栈,地址为 100-103 或 0FD - 100? 你能看看***.com/questions/70919423/…

以上是关于Y86 和程序混淆的主要内容,如果未能解决你的问题,请参考以下文章

合并 Jacoco 结果,混淆和非混淆运行

代码混淆 iOS

用这些C#代码混淆器保护你的代码安全

使用 proguard 的 Android 混淆应用程序会不断混淆库 jar - 是吗?

3.资源里加个混淆

使用 CORBA 混淆 Android 应用程序