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 和程序混淆的主要内容,如果未能解决你的问题,请参考以下文章