美文网首页
堆栈相关指令

堆栈相关指令

作者: 欧皇ff | 来源:发表于2020-03-31 20:29 被阅读0次
指令 注释 使用
PUSH <1>向堆栈入压入数据
<2>修改栈顶指针ESP寄存器的值
PUSH r16/32
PUSH m16/32
PUSH imm8/16/32
POP <1>将栈顶数据存储到寄存器/内存
<2>修改栈顶指针寄存器的值
POP r16/32
POP m16/32

什么是堆栈?

操作系统在程序启动时所分配的内存
  1. 就是一块内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用。

2.和数据结构的堆栈无关。

3.查看堆栈。


查看堆栈
  • 查看堆栈操作步骤:

1、随便打开一个EXE程序到DTDebug工具中
2、找到FS位的内存地址 0x7ffdd000
3、dd 7ffdd000
4、即可看到0x0012D000~0x00130000内存地址,即堆栈内存
5、在内存框即可看到全部内存。

注:程序使用内存是从大地址到小地址顺序使用的。
注:内存溢出就会出错。比如:递归死循环等

PUSH 自定义实现思路:

向堆栈存入数据
修改ESP 指针

mov dword ptr ds:[0x0012ffb8],1
mov dword ptr ds:[0x0012ffb4],2
sub esp,8 //移动栈顶指针到目标位置
add esp,8 //恢复栈顶指针的位置

//1.堆栈存入数据 2.栈顶指针 - 4
push 3 
push eax
push dword ptr ds:[0x0012ffc4]
思考:

C语言程序中为什么局部变量需要赋初始值?
如果不赋初始值会出现什么情况?
局部变量初始化分配内存是 堆栈中随机分配的内存,如果是之前的局部变量数据,这样初始化的值就不一定是0.

PUSH

POP 自定义实现思路:

读出栈顶指针指向数据
修改ESP指针

//ecx 循环计数,临时需要执行一个循环体又不丢失ecx原有的值应该如何实现
push 1
push 2
push 3
push ecx
mov ecx,A
rep movsd
mov ecx,dword ptr ds:[dsp]
sub dsp,16
push ecx
mov ecx,A
rep movsd
pop ecx
POP
思考:

1.POP 次数大于PUSH 次数会有什么结果?
2.POP dword ptr ds:[dsp] 会有什么结果?

相关文章

  • 堆栈相关指令

    指令注释使用PUSH<1>向堆栈入压入数据<2>修改栈顶指针ESP寄存器的值PUSH r16/32PUSH m16...

  • 5.汇编-堆栈相关指令

    5.汇编-堆栈相关指令 什么是堆栈 程序启动的时候操作系统会给每个程序一块虚拟的4G内存当程序需要使用的时候必须要...

  • 堆栈

    堆栈设计图 堆栈优点 临时存储大量的数据,便于查找 push内存指令 POP指令

  • Linux软件管理day17

    yum指令yum本地仓库搭建 一、yum指令 1.与yum仓库相关指令 2.与yum缓存相关指令 3.组包相关指令...

  • iOS逆向:ARM64汇编基础

    目录一,基本知识二,搭建环境三,通用寄存器四,基础指令五,跳转指令六,内存指令七,堆栈八,实战练习 一,基本知识 ...

  • iOS ARM64 汇编入门

    这里主要介绍 iOS 平台上 ARM64 架构的寄存器和指令以及内存堆栈。 堆栈 在 iOS 中,栈空间是向下生长...

  • day17-Linux学习 软件管理yum(中)

    一、YUM相关知识点 1、与yum仓库相关指令 2、与yum缓存相关指令 3、组包相关指令 二、搭建本地仓库 有的...

  • 反汇编01

    堆栈是连续的地址空间,且向低地址端生长。 esp 是堆栈指针ebp 是基址指针那两条指令的意思是将栈顶指向ebp的...

  • 操作数栈管理指令

    如同操作一个普通数据结构中的堆栈一样,JVM提供的操作数栈管理指令,可以用于直接操作操作数栈的指令。 这类指令包括...

  • c++入门 - 内联函数、#pragma once

    内联函数 函数的调用 执行到函数调用指令时,程序将在函数在调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(...

网友评论

      本文标题:堆栈相关指令

      本文链接:https://www.haomeiwen.com/subject/cpuguhtx.html