汇编——修改EIP的值

EIP 指令指针寄存器

核心功能:EIP存放下一条即将执行指令的内存地址,CPU 依靠 EIP 按顺序逐条取指运行

硬性规则:代码中无法使用 MOV 等普通指令直接赋值修改 EIP(mov eip,0x401000是非法代码),只能依靠专用跳转 / 调用指令间接改写

JMP 无条件跳转指令

本质功能:直接修改 EIP,强行切换代码执行位置

支持三种操作数:立即地址、通用寄存器、内存地址

jmp 0x401100 ; 立即数地址

jmp eax ; 寄存器内的值作为新EIP

jmp dword ptr esi ; 取出内存数值赋值给EIP

执行流程:把目标地址直接写入 EIP,无堆栈操作

CALL 子程序调用指令

同样会改写 EIP 实现跳转,比 JMP 多一步堆栈保存

完整执行步骤(32 位):

1.把CALL 下一条指令的返回地址压入栈:ESP = ESP - 4,ESP = 返回地址

2.将目标函数地址写入 EIP,跳转到子程序运行

作用:实现函数 / 子程序调用,预留返回的地址凭证

RET 返回指令(RETURN)

配合 CALL 成对使用,实现函数调用后回到原代码位置

32 位标准执行步骤:

1.读取栈顶保存的返回地址,赋值给 EIP

2.栈指针上移回收空间:ESP = ESP + 4

拓展:还有RET n格式,弹出地址后额外再加 n 平衡栈,多用于 stdcall 调用约定

三指令对比

JMP:只改 EIP,不操作栈,单纯跳转

CALL:压返回地址到栈 → 改 EIP,调用函数

RET:弹栈地址给 EIP → 抬高 ESP,函数返回

相关推荐
峥嵘life1 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言
wgego2 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
RobinDevNotes2 小时前
开源AI渗透测试智能体自动验证真实漏洞
人工智能·网络安全·ai·个人开发·开发工具
山峰哥3 小时前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
wangjialelele3 小时前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
Awna3 小时前
Golang 大小写可见性规范
开发语言·后端·golang
AI科技星4 小时前
曲率‑挠率与 $\boldsymbol{\omega/c}$ 的关系、精算验证及其物理意义
c语言·开发语言·线性代数·算法·决策树·机器学习·ai科技星
鹿角片ljp4 小时前
Java框架篇:Spring + SpringMVC + SpringBoot + MyBatis深度复习
java·开发语言
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题 第216题】【10_网络协议篇】第7题:HTTP 协议和 HTTPS 协议的区别
java·http·网络安全·https·ssl/tls