热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Linux进程初始堆栈内容查看

文章标题:Linux进程初始堆栈内容查看。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  在学习《程序员的自我修养》时,对其P172页图6-12 “Linux进程初始堆栈”内容的来路有点兴趣,遂花了点时间研究了下,茫然中居然试探出了条可以得到进程初始堆栈的途径……

  [root@cxj /]# cat a.c

  #include

  #include

  int main()

  {

  printf("hello world\n");

  return 0;

  }

  [root@cxj /]# readelf -a a.out | head -n 11

  ELF Header:

  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00

  Class:                             ELF32

  Data:                              2's complement, little endian

  Version:                           1 (current)

  OS/ABI:                            UNIX - System V

  ABI Version:                       0

  Type:                              EXEC (Executable file)

  Machine:                           Intel 80386

  Version:                           0x1

  Entry point address:               0x80482f0         %获取入口地址

  [root@cxj /]# gdb a.out                                %载入可执行文件

  GNU gdb Red Hat Linux (6.6-35.fc8rh)

  Copyright (C) 2006 Free Software Foundation, Inc.

  GDB is free software, covered by the GNU General Public License, and you are

  welcome to change it and/or distribute copies of it under certain conditions.

  Type "show copying" to see the conditions.

  There is absolutely no warranty for GDB.  Type "show warranty" for details.

  This GDB was configured as "i386-redhat-linux-gnu"...

  Using host libthread_db library "/lib/libthread_db.so.1".

  (gdb) b *0x80482f0                                     %将入口地址设为断点

  Breakpoint 1 at 0x80482f0

  (gdb) r                                                %启动进程

  Starting program: /a.out

  warning: Missing the separate debug info file: /usr/lib/debug/.build-id/ac/2eeb206486bb7315d6ac4cd64de0cb50838ff6.debug

  warning: Missing the separate debug info file: /usr/lib/debug/.build-id/ba/4ea1118691c826426e9410cafb798f25cefad5.debug

  Breakpoint 1, 0x080482f0 in _start ()

  (gdb) i r esp                                          %查看栈顶指针(esp)

  esp            0xbf8e5a40       0xbf8e5a40

  (gdb) x/5570bw 0xbf8e5a40     %查看从esp所指位置开始足够远的存储区域内容,此处5570指查看从0xbf8e5a40开始的5570个“字”(此处为4字节)的内容

  %此处取5570只是为了使往后查看的内容足够大。

  %事实上我们可以从当前地址往后推最多0x3000个字节且以0x1000对齐的字节数。【经验,我并没有深究理论上的原因】

  %比如   0xbf8e5a40 往后推最多0x3000个字节且保持 0x1000对齐的话将得到 0xbf8e8000

  %这片区域包含的字节数换算成“字”数即为:(0xbf8e8000-0xbf8e5a40)/4 = 2416

  %所以此处用比2416略大(为了得到错误)的值替换5570即可成功得到 Cannot access memory at address 0xXXXXXXXX 的错误消息(((不妨一试)))

  %该错误消息可作为对当前进程的栈访问越界的标志。

  %

  %如果使用“ x/5570bw 0xbf8e5a40 ”命令无法得到如下所示的输出结构,不妨试试 “ x/5570x 0xbf8e5a40 ”

  0xbf8e5a40:     0x00000001      0xbf8e7a98      0x00000000      0xbf8e7a9f

  0xbf8e5a50:     0xbf8e7ad2      0xbf8e7aea      0xbf8e7afa      0xbf8e7b05

  0xbf8e5a60:     0xbf8e7b13      0xbf8e7b30      0xbf8e7b46      0xbf8e7b64

  0xbf8e5a70:     0xbf8e7b77      0xbf8e7b81      0xbf8e7bb0      0xbf8e7d73

  0xbf8e5a80:     0xbf8e7d90      0xbf8e7d9b      0xbf8e7e30      0xbf8e7e4a

  0xbf8e5a90:     0xbf8e7e59      0xbf8e7e88      0xbf8e7e8e      0xbf8e7ea3

  0xbf8e5aa0:     0xbf8e7eb4      0xbf8e7ec7      0xbf8e7ed9      0xbf8e7ee6

  0xbf8e5ab0:     0xbf8e7eef      0xbf8e7f22      0xbf8e7f2d      0xbf8e7f35

  0xbf8e5ac0:     0xbf8e7f5f      0xbf8e7f6c      0xbf8e7f78      0xbf8e7f92

  0xbf8e5ad0:     0xbf8e7fbe      0xbf8e7fe0      0x00000000      0x00000020

  0xbf8e5ae0:     0x00110400      0x00000021      0x00110000      0x00000010

  0xbf8e5af0:     0xbfebf3ff      0x00000006      0x00001000      0x00000011

  0xbf8e5b00:     0x00000064      0x00000003      0x08048034      0x00000004

  0xbf8e5b10:     0x00000020      0x00000005      0x00000008      0x00000007

  0xbf8e5b20:     0x00000000      0x00000008      0x00000000      0x00000009

  0xbf8e5b30:     0x080482f0      0x0000000b      0x00000000      0x0000000c

  0xbf8e5b40:     0x00000000      0x0000000d      0x00000000      0x0000000e

  0xbf8e5b50:     0x00000000      0x00000017      0x00000000      0x0000000f

  0xbf8e5b60:     0xbf8e5b7b      0x00000000      0x00000000      0x00000000

  0xbf8e5b70:     0x00000000      0x00000000      0x69000000      0x00363836

  0xbf8e5b80:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5b90:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5ba0:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5bb0:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5bc0:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5bd0:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5be0:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5bf0:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5c00:     0x00000000      0x00000000      0x00000000      0x00000000

  0xbf8e5c10:     0x00000000      0x00000000      0x00000000      0x00000000

[1] [2] [3] [4] [5] [6] 下一页


推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文主要讨论了在xps15上安装双系统win10和MacOS后,win10无法正常更新的问题。分析了可能的引导问题,并提供了解决方法。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
author-avatar
w3a00048_304
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有