如何在堆上实现堆栈的情况下将程序集转换为C?

时间:2013-12-13 19:50:01

标签: c assembly stack heap reverse-engineering

我知道有一些帖子谈论翻译装配到C, 但基本上它们都是针对如何获得 Human Readable C源代码。

所以我想要实现的是在堆上实现堆栈的转换过程。

我不需要使代码易于阅读,只需翻译成合法的c源代码 甚至伪代码(如果直接翻译成c源代码太难了),

但是在这个相对容易的任务中(根本不容易),我想在堆上实现堆栈,就像ML和Scheme编译器一样。

有人能给我一些关于这些东西的指导和说明吗?

实验环境应该在x86上,并且汇编是从

生成的
gcc -S source

假设我们在此任务中有原始的c源代码,它有帮助吗?

1 个答案:

答案 0 :(得分:1)

假设x86 / x64在这里......

堆栈指针由ESP(32位)或RSP(64位)寄存器跟踪。 您可以将mov ESP, ADDRESS指令插入ASM并将堆栈更改为首选位置。您需要先在新堆栈上存储ESP / RSP,因为以后需要它。

在C程序中设置ESP / RSP后立即调用main()(或任何其他C函数)。

函数返回后,将ESP / RSP恢复为原始值。