当前位置:  技术问答>linux和unix

帮忙解释下这几句汇编代码,各位大虾

    来源: 互联网  发布时间:2016-02-09

    本文导语:  gcc编译输出后用objdump得到的 fprintf(stderr,"%d%d%d%sn",a,b,c,p);  80483c8:       83 ec 08                sub    $0x8,%esp  80483cb:       ff 75 f0                pushl  0xfffffff0(%ebp)  80483ce:       ff 75...

gcc编译输出后用objdump得到的
fprintf(stderr,"%d%d%d%sn",a,b,c,p);
 80483c8:       83 ec 08                sub    $0x8,%esp
 80483cb:       ff 75 f0                pushl  0xfffffff0(%ebp)
 80483ce:       ff 75 f4                pushl  0xfffffff4(%ebp)
 80483d1:       ff 75 f8                pushl  0xfffffff8(%ebp)
 80483d4:       ff 75 fc                pushl  0xfffffffc(%ebp)
 80483d7:       68 d1 84 04 08          push   $0x80484d1
 80483dc:       ff 35 e0 95 04 08       pushl  0x80495e0
 80483e2:       e8 e1 fe ff ff          call   80482c8 
 80483e7:       83 c4 20                add    $0x20,%esp

弄不懂第一个sub和最后一个add有什么用,其中a,b,c为int,p为char *

帮帮忙啊,准备使用内联汇编调用fprintf函数,自己push参数,在这里卡住了

|
sub    $0x8,%esp -- 目的使堆栈指针下移8字节,相当于两个pushl(入栈8字节).
然后将6个fprintf()参数压入堆栈,注意入栈顺序跟函数签名顺序相反,即先压入p,最后压入stderr(调用函数从栈顶读起,刚好顺序读到参数)
然后使用call中断,以调用函数fprintf@plt.
add    $0x20,%esp -- 其实等人于8次pushl,将恢复调用前的堆栈指针ebp.
这里是对的,0x20=32,相当于出栈32字节.而前面正好压入32个字节.
前面压入8字节(sub    $0x8,%esp )空数据,估计是fprintf@plt的约定使用,不太了解

|
80483c8:       83 ec 08                sub    $0x8,%esp :

在堆栈中建立自动变量;

80483e7:       83 c4 20                add    $0x20,%esp:

恢复栈指针。

|
这两个语句从语句面上很好解释, 就是移动栈指针.
最后的add只能是16的整数倍, 也就是0x10 0x20之类的, 前面的sub是为了和pushl的一起凑成16的整数倍.

应该是对齐.

    
 
 

您可能感兴趣的文章:

  • 网页上的饼壮图和柱状图是怎么实现的?请大虾帮忙!
  • 哪位大虾帮忙,怎么修改Aix机器上某个帐户的密码?
  • QTextBrowser的拖影问题,各位大虾,帮帮忙
  • 关于聊天室的若干疑问!!!请各位大虾帮忙!
  • 大虾帮忙,怎样用JDBC-ODBC连接SQL2000并使用呀?
  • 救急!本人小菜,在安装linux下得vsftpd时遇到了问题,那位大虾帮帮忙啊
  • U盘的LINUX系统问题,大虾们帮帮忙。
  • DELL服务器,安装RedHat EAS3.0,装完了,连不上SSH。。。。。哪位大虾帮忙!!急啊 !!!!
  • 一个JButton的小问题。大虾请帮忙!
  • RedHat8上解压Oracle9磁盘丢失磁盘空间,请大虾帮忙!
  • 关于linux下sendmail的配置(请各位大虾帮忙,谢谢。)
  • RH9下装了wine-2005011,运行qq提示说有问题。大虾帮忙看看。
  • 各位大虾segmentation fault的问题。我都晕了,帮帮忙吧,仅有的10送给你
  • 大虾们,帮帮忙!
  • 大虾们,请帮忙!
  • 不太理解protected的意思,请大虾帮忙解释一下。
  • 求助,各位大虾帮忙
  • 急!各位大虾谁来帮忙?小妹感激不尽!!
  • 大虾帮忙看一下!谢谢!
  • 请各位大虾帮忙
  • c内嵌汇编问题,超级初级,大家帮忙
  • 哪位帮忙把这个汇编宏,解析一下?
  • Linux汇编代码...各位帮帮忙
  • 关于汇编跳转到elf文件问题,忙了一个下午都弄不好,大家帮帮忙啊
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高手帮忙解释
  • 帮忙解释一下make的用法!
  • 哈哈,新手上路,大家帮忙解释一下.
  • 那位大虾帮忙解释一下,为什么调用unix命令失败
  • 脚本接触的太少,能帮忙解释一下,这句话是干什么的吗?
  • 请帮忙解释一条shell语句
  • 帮忙解释一条shell命令
  • 帮忙解释下这两个减号的含义
  • 请帮忙解释以下脚本 我很着急 在线等着 谢谢
  • 请帮忙解释两个专业概念!
  • 请高手帮忙解释一下,insmod ./$module.ko || exit 1中的“||”是什么意思啊,多谢!
  • 请帮忙解释下一条shell语句
  • 帮忙解释一下一个AWK语句,谢谢
  • 一个关于shell的问题,麻烦帮忙解释一下
  • 请问这两个小问题谁能帮忙给解释一下。
  • 关于"symbol lookup error"问题的诡异现象,高手帮忙解释解释
  • 帮忙解释一下,下面几句make文件的意思吧,关键是@for是怎么回事
  • 这段话不太明白,谁能帮忙解释一下,我哪理解的不对?
  • 请大家帮忙解释一下几个关于JSP的概念
  • 谁能帮忙解释一下: ORA-01000 : maximun open cursors exceeded
  • 努力努力再努力,帮忙帮忙来帮忙!
  • 在servlet中有一个关于单引号输出的问题,请大家帮忙,帮忙,帮帮忙!!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 帮忙帮忙如何设置变量pathclass
  • 没人帮忙吗?我想用JAVA编一个像WINDOW中的画图软件,现在出现了如下问题,请各位老哥老姐帮帮忙
  • 帮帮忙!SCO OpenServer 5.0.5 的root用户口令丢了,怎么找回来啊,帮帮忙!!!!!!
  • 我用smartupload组件遇到问题了,请帮忙!!
  • webmail问题,请高手帮忙!!!谁会使用IMP 3.0????!!!
  • 脚本问题,帮忙
  • 求教求教,shell问题...各位大哥,帮忙下
  • 关于程序移植,请知道的帮忙,分会加的


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3