ELF文件格式如何定义堆栈?

2023-11-26

我正在研究 ELF 文件格式,因此我编译了一个小程序,从生成的可执行文件中转储了节标题及其内容。

ELF 标头包含入口点地址,该地址指向 .text 部分的开头。

我还找到了包含静态数据的 .data 部分和包含只读数据的 .rodata ...我希望也有一个堆栈部分,但我找不到该部分。

我还预计在某些时候 ESP 会被设置到某个部分的顶部,但我在反汇编中找不到类似的内容。

那么ESP的初始值是如何得到的呢?


下图描述了 x86 上典型 C ELF 可执行文件的内存映射。

 Memory map of an C ELF executable on x86

  • 该过程加载.text and .data基地址处的部分。

  • The 主栈位于正下方并向下生长。

  • 每个线程和函数调用都会有其自有堆栈 / 栈帧.
    它位于下面主栈.

  • Each stack由保护页分隔以检测堆栈溢出。

因此,不需要专门的stackELF 文件中的部分。


然而在ELF 的手册页, one does在 ELF 文件中找到一些控制的东西stack属性。主要是可执行权限stack在记忆中。

  1. PT_GNU_STACK
    Linux 内核使用 GNU 扩展来通过在p_flags member.

  2. .note.GNU-stack
    此部分在 Linux 对象文件中用于声明堆栈属性。该部分的类型为 SHT_PROGBITS。唯一使用的属性是 SHF_EXECINSTR。这向 GNU 链接器表明目标文件需要可执行堆栈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ELF文件格式如何定义堆栈? 的相关文章

  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • 可以作为命令行参数传递多少数据?

    在 Linux 下生成进程时可以发送多少字节作为命令行参数 gahooa 推荐了一篇好文章http www in ulm de mascheck various argmax http www in ulm de mascheck vari
  • 提高mysql导入速度[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我有一个很大的数据库22GB 我曾经用过进行备份mysqldumpgzip 格式的命令 当我提取 gz 文件时 它会生成 sql文件的
  • 比较linux中的两个未排序列表,列出第二个文件中的唯一项

    我有 2 个包含号码列表 电话号码 的文件 我正在寻找一种列出第二个文件中第一个文件中不存在的数字的方法 我尝试过各种方法 comm getting some weird sorting errors fgrep v x f second
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 读取ELF二进制的plt部分并打印函数虚拟地址

    我想读取 ELF 二进制文件的 plt 部分并获取外部函数的所有虚拟地址 Disassembly of section plt 0000000000400400
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • 为什么使用signalfd无法捕获SIGSEGV?

    我的系统是ubuntu 12 04 我将示例修改为man 2 signalfd 并添加sigaddset mask SIGSEGV 在示例中 但我无法得到输出SIGSEGV被生成 这是一个错误吗glibc 源代码片段如下 sigemptys
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 如何查看共享库加载的顺序

    给定一个 ELF 二进制文件或共享对象 我如何才能最轻松地查看所需共享库的加载顺序 它们是否按照列出的顺序加载readelf d 我怎样才能最容易地看到所需共享库的加载顺序 Use LD DEBUG LD DEBUG files bin l
  • 点击界面没有出现

    我决定添加一个点击界面并在我的代码中使用它 但我能够得到它的状态 sudo ip f link tuntap add tap10 mode tap sudo ip link set tap10 up 之后当我执行 ip link 时 tap
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • 如何使用 PyAudio 选择特定的输入设备

    通过 PyAudio 录制音频时 如何指定要使用的确切输入设备 我的电脑有两个麦克风 一个内置 一个通过 USB 我想使用 USB 麦克风进行录音 这流类 https people csail mit edu hubert pyaudio

随机推荐

  • 找不到存储过程“dbo.aspnet_CheckSchemaVersion”

    我正在使用 WinHost com 托管我的网站 SQL 数据库 会员系统在我的本地计算机上运行良好 但上传到服务器时却无法运行 我已正确执行所有步骤 我已联系我的服务支持人员 但已经过去两周了 没有回复 当我尝试在网站的会员页面上登录或注
  • 嵌入式二进制文件未使用与父应用程序相同的证书进行签名,但它们是相同的

    An app extension is causing a code signing issue This app is already on the Appstore with this extension yet overnight f
  • 在按 ctrl- 时使用 :tjump 而不是 :tag vim]

    in vim 当我按下ctrl 1 平时的行为 它转到第一个与光标下的单词匹配的标签 之后我们需要做 tjump单独查看所有匹配标签的列表 然后跳转到所需的标签 2 我想要的是 vim 应该搜索标签文件 如果有多个匹配项 请显示所有匹配标签
  • SQL 2012 - 迭代 XML 列表(WHILE 循环的更好替代方案)

    使用 SQL 2012 并获取传递到存储过程的 XML 该存储过程必须获取该输入 并为传递到存储过程的 XML 部分中的每个项目在表中写入一行 XML 看起来像
  • += 是做什么用的?

    我认为这是一个愚蠢的问题 但我在 php 上找不到它 为什么下面的代码中 function calculateRanking created this gt getCreated diff this gt getTimeDifference
  • 如何删除文件?

    给定文件的完整路径 如何删除文件 你要文件 删除 File Delete C Documents and Settings Vijay EKO 03 Desktop blockseek3 9 2010 Block3 xml
  • 如何在没有数据库连接的情况下从 dbplyr 生成 SQL?

    我目前可以通过以下方式访问 Apache Hive 数据库beeline命令行界面 我们仍在与 IT 部门协商以获得R在服务器上 在那之前 我想 ab 使用R dbplyr包以在另一台计算机上生成 SQL 查询 将其复制过来 然后将其作为原
  • 我可以使用 UIActivityViewController 在 Facebook 上分享吗?

    我正在尝试使用 UIActivityViewController 在 facebook 上分享 当我使用 UIImage image UIImage imageNamed image1 png NSArray dataToShare tes
  • 简单的 Scala getter/setter 重写

    假设我们有一个带有 name 属性的类 class SuperFoo var name String 如果我想覆盖它 例如在调用周围添加一些锁定 class SubFoo n String extends SuperFoo n val lo
  • React/Flux 和 xhr/路由/缓存

    这更像是 你的意见是什么 我的想法正确吗 问题 在理解 Flux 的同时尽可能严格 我试图弄清楚 XHR 调用在哪里进行 websockets 外部刺激处理 路由发生等 根据我阅读的文章 采访和 Facebook 示例 有几种处理这些事情的
  • WebView saveState() 是否保留 Javascript 变量/环境?

    我搜索了很多主题 但仍然找不到我的问题的答案 我正在研究一个Android应用程序使用WebView I use onSaveInstanceState and onRestoreInstanceState 来保存WebView像这样声明
  • 如何使用 C# 验证 html 文件?

    我有一个接收 html 文件的 C 应用程序 我想解析并验证它 输出时 它将返回错误列表或我的 html 有效 有谁知道我该怎么做 我会运行一个本地实例W3C 标记验证服务并通过API
  • 没有开发者帐户可以使用推送通知吗? [复制]

    这个问题在这里已经有答案了 是否可以在没有开发者帐户的情况下使用推送通知仅用于测试 不 在写这个答案时我们不能这样做 如此处所述https www raywenderlich com 8164 push notifications tuto
  • JavaScript:一一执行异步函数

    我有一个简单的 异步 JS 函数 function asyncFunc i setTimeout function console log i 1000 如果我想在 for 循环中执行这个 asyncFunc 5 次 即每秒记录 1 5 次
  • 将数据从一个网页传递到另一个网页

    我需要使用客户端技术将潜在的大量数据从一个页面传递到另一个页面 它基本上是一个将显示在目标页面上的 id 列表 显然查询字符串不适合 因为可能有数千个 id 所以我想我可以使用 javascript 动态添加表单 method GET 将
  • kubernetes 中的容器标签

    我正在使用 jenkins 构建我的 docker 镜像 docker build build arg VCS REF GIT COMMIT build arg BUILD DATE date u Y m dT H M SZ build a
  • 为什么这个嵌套宏替换失败?

    我正在尝试应用X Macro概念 以便能够将所有结构成员初始化为自定义默认 无效 值 我编写以下代码 define LIST OF STRUCT MEMBERS foo X a X b X c define X name int name
  • 如何在uwp的xaml中拉伸/调整svgs的大小?

    自从创建者更新发布以来 uwp 可以使用 svg 图像 简要说明这里 第 3 分钟 I have this svg 48x48 并且我可以很好地使用它 如果 且仅当 我将图像的宽度和高度设置为 48 并将拉伸设置为无
  • jQuery(..).html() 在 jQuery 1.3.2 中有错误吗?

    这里的代码没有返回预期的结果 jQuery div Look here jQuery0 null div html 相反 你会得到 Look here 有问题的 jQuery 源代码 html function value return v
  • ELF文件格式如何定义堆栈?

    我正在研究 ELF 文件格式 因此我编译了一个小程序 从生成的可执行文件中转储了节标题及其内容 ELF 标头包含入口点地址 该地址指向 text 部分的开头 我还找到了包含静态数据的 data 部分和包含只读数据的 rodata 我希望也有