看了《coredump问题原理探究》系列博文后。在Linux 64位下分析了栈分布情况,在函数参数,局部变量等上面和32位有一些差别。现记录下来,以供参考。
首先在64位下,寄存器esp变成了rsp,ebp变成了rbp,ip变成了rip。
环境:
1. Linux内核版本:
>cat /proc/version
Linux version 2.6.18-128.7.1.el5 (brewbuilder@norob.fnal.gov) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Mon Aug 24 08:12:52 EDT 2009
2. Linux版本:
>lsb_release -a
LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: ScientificSL
Description: Scientific Linux SL release 5.3 (Boron)
Release: 5.3
Codename: Boron
3. G++版本:
>g++ -v
Using built-in specs.

这篇博客探讨了Linux 64位环境下栈的布局,对比32位系统的不同。主要内容包括寄存器变化(esp->rsp, ebp->rbp, ip->rip),参数传递由寄存器完成,以及如何通过反汇编查看函数参数。文章通过实例展示了参数如何通过edi, esi, edx传递,并在func()和main()中进行验证。"
112964676,10552256,numpy同时洗乱多个数组的高效方法,"['numpy', '数组操作', '数据处理', '算法']
最低0.47元/天 解锁文章
2611

被折叠的 条评论
为什么被折叠?



