博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下32位汇编调用规则
阅读量:7185 次
发布时间:2019-06-29

本文共 534 字,大约阅读时间需要 1 分钟。

传递给系统调用的参数必须安装参数顺序一次放到寄存器中,当系统调用完成后,返回值放在eax中:

  1. 当系统调用参数<=5个时:
    eax中存放系统调用的功能号,传递给系统调用的参数顺序依次放到寄存器:ebx,ecx,edx,esi,edi中
  2. 当系统调用参数>5个时:
    eax中存放系统调用的功能号,全部参数应依次放在一块连续的内存区域中,同时在寄存器ebx中保存指向该内存区域的指针(内存块的首地址);linux采用的是C调用模式,这意味着如果要以stack来实现这个连续的内存块(当然可以用其他方式实现,比如heap)时,所有参数必须以相反的顺序进栈:即最后一个参数最先进栈,第一个参数最后进栈,最后将栈指针的值(栈顶地址)放到寄存器ebx中。

C库函数的参数传递规则:

  1. 参数从右向左一次入栈(push);
  2. 库函数返回值放在eax中;
  3. 系统调用exit参数值在exit调用结束程序退出时会被传递给系统shell,通过打印$?的值可以看到

汇编函数的返回值:

  1. 对于32位返回值放在寄存器eax中
  2. 对于64位返回值,高位放在edx,低位放在eax中

本篇未给出浮点数值的调用和返回规则,虽然略知一二,但没有系统化的认识,不敢乱写;如各位有相关的完整文档请不吝赐教帮助补全,谢谢。

转载地址:http://mcfkm.baihongyu.com/

你可能感兴趣的文章
LINUX 安全运维 (一)
查看>>
Maven学习总结(九)——使用Nexus搭建Maven私服
查看>>
Java基础学习总结(1)——equals方法
查看>>
PHP整理笔记七字符串处理
查看>>
我的友情链接
查看>>
apr
查看>>
kali linux常用软件配置记录
查看>>
RabbitMQ学习总结(6)——消息的路由分发机制详解
查看>>
2018-04-27 Linux学习
查看>>
ansible+jenkins+svn实现生产环境自动发布
查看>>
Java Web学习总结(5)——HttpServletResponse对象详解
查看>>
学习笔记(13)
查看>>
curl命令使用大全
查看>>
Netty4 之 简单搭建WebSocket服务
查看>>
我的Git忽略文件
查看>>
C# 项目异常处理的总结 C# 项目异常处理的总结 .NET异常处理总结
查看>>
【易语言作品】夜猫护眼宝 PC版 大神勿喷,语言是国产的易语言!
查看>>
Java基础学习总结(3)——抽象类
查看>>
安装Apache
查看>>
WebView图片加载不完全
查看>>