汇编知识笔记

本文深入解析了x86体系结构中函数调用的过程,详细阐述了寄存器的作用与职责,包括eip、esp、ebp、eax、edx、ecx、ebx、esi、edi的功能。同时介绍了在x86体系结构下如何通过pushebp、movebp、andesp、subesp、mov、call、leave、ret等指令实现函数调用与返回的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

eip $pc 下一个要执行的指令地址

esp 栈指针

ebp 桢指针

eax,edx,ecx 寄存器需要调用者负责保护(保存),就是通过入栈来保存

ebx,esi,edi 寄存器需要被调用者负责保护(保存)

在x86体系结构上,本运行模块的GOT表首地址始终保存在%ebx寄存器中

 

--------------------------------------------------------------------------------------------------------------

push ebp       //ebp入栈,esp-4

mov ebp,esp  //ebp = esp

and esp,-16   //栈空间16字节对齐

sub esp,32   //esp = esp-32,为栈分配32个字节

mov [esp],eax //把eax的值写入到[esp],前面已经预留了空间(对齐16,预分配32,一共48个字节)

call test //call等价于push eip,jump func_addr     把返回地址入栈,再跳到test函数地址

mov eax,0 //函数返回值

leave //等价于mov esp,ebp  再pop ebp

ret //把返回值出栈,并赋值给eip

------------------------------------------------------------------------------------------------------

 

 

 

转载于:https://my.oschina.net/hudangwei/blog/717647

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值