汇编利用ret调用C

本文探讨了如何在C程序中利用汇编的ret指令来调用C函数,通过分析函数调用和返回的堆栈操作,展示了如何手动管理堆栈以实现程序跳转。示例程序展示了如何构造返回地址并利用ret调用函数,成功实现了函数的调用和返回流程。
摘要由CSDN通过智能技术生成

       之前看了linux 0.11的系统调用返回机制,利用iret去改变eip,从内核空间代码转移到用户空间代码上运行,然后我就想试一试利用ret来调用C函数。由于不想另外再写一个汇编文件,我就选择了C嵌汇编的用法。

    首先我们来看一看在C里面,函数调用和函数返回是怎么实现的。我们可以写一个简单的程序编译然后反汇编来看看,函数调用和返回的指令还有堆栈的数据(堆栈在函数返回中起着重要的作用)。我们来写个简单的程序:

intfun(int a)

{

    a = 1;

}

 

 

voidmain()

{

    int b = 1;

    fun(b);

}

经过反汇编之后得出的汇编:

080483b4<fun>:

 80483b4:      55                        push   %ebp

 80483b5:      89e5                      mov    %esp,%ebp

 80483b7:      c745 08 01 00 00 00    movl   $0x1,0x8(%ebp)

 80483be:      5d                       

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值