内存中的代码执行的方向是什么?

时间:2018-06-15 10:59:05

标签: c stack shellcode

假设我将shellcode注入到进程的内存中,shellcode会以哪种方式执行?假设堆栈底部有更高的内存地址,堆栈顶部有更低的内存地址,shellcode是否从shellcode的最低内存地址运行到shellcode的最高内存地址,反之亦然?

3 个答案:

答案 0 :(得分:3)

除了分支外,对于x86系列的CPU,IP只能从较低的数字到较高的数字。

在执行之前,IP位于指令的开头。在解码之前,CPU不知道指令有多长。不可能向另一个方向走,因为无法确定先前指令的最后一个字节是参数还是编码本身的指令的一部分。

堆栈从较高地址增长到较低地址。 (这可能源于堆栈和堆内存共享相同RAM区域的历史起源。)但是,这并不意味着堆栈中存储的数据的顺序相反 - 它只是新分配的堆栈空间地址低于先前分配的地址。

答案 1 :(得分:2)

程序计数器(又称指令指针)通常从较低的存储器地址移动到较高的存储器地址(当然除了分支和函数调用/返回)。

答案 2 :(得分:0)

您关心堆栈指针的移动方向。堆栈指针指向该内存块的末尾(您的进程所在的位置),并在每次按下新值时递减(并在弹出时递增)。