获取精灵部分偏移量

2024-02-26

我正在尝试获取 elf 文件每个部分的偏移量和数据。 我已经有了包含以下代码的部分名称:

#include <elf.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>

int filesize(int fd)
{
  return (lseek(fd, 0, SEEK_END));
}

void    print_section(Elf64_Shdr *shdr, char *strTab, int shNum)
{
  int   i;

  for(i = 0; i < shNum; i++)
     printf("%02d: %s\n", i, &strTab[shdr[i].sh_name]);
}

int main(int ac, char **av)
{
  void  *data;
  Elf64_Ehdr    *elf;
  Elf64_Shdr    *shdr;
  int       fd;
  char      *strtab;

  fd = open(av[1], O_RDONLY);
  data = mmap(NULL, filesize(fd), PROT_READ, MAP_SHARED, fd, 0);
  elf = (Elf64_Ehdr *) data;
  shdr = (Elf64_Shdr *) (data + elf->e_shoff);
  strtab = (char *)(data + shdr[elf->e_shstrndx].sh_offset);
  print_section(shdr, strtab, elf->e_shnum);
  close(fd);
  return 0;
}

但我找不到一种方法来获取每个部分的数据及其起始偏移量。 感谢您的帮助


我想你可以使用sh_offset and shdr[i].sh_size:

void    print_section(Elf64_Shdr *shdr, char *strTab, int shNum, uint8_t *data)
{
  int   i;  

  for(i = 0; i < shNum; i++) {
    size_t k;
     printf("%02d: %s Offset %lx\n", i, &strTab[shdr[i].sh_name], 
        shdr[i].sh_offset);
     for (k = shdr[i].sh_offset; k < shdr[i].sh_offset + shdr[i].sh_size; k++) {
       printf("%x", data[k]);
     }   
     printf("\n");
     for (k = shdr[i].sh_offset; k < shdr[i].sh_offset + shdr[i].sh_size; k++) {
       printf("%c", data[k]);
     }   
     printf("\n");
  }
}

并这样称呼它:

print_section(shdr, strtab, elf->e_shnum, (uint8_t*)data);

获取虚拟地址(偏移量)的一种方法:

Elf64_Phdr *ph = (Elf64_Phdr *) ((uint8_t *) data + elf->e_phoff);
printf("Virtual address offset: %lx\n", ph->p_vaddr - elf->e_phoff);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取精灵部分偏移量 的相关文章

随机推荐

  • 在 Windows 上使用与 Rtools 和 Rcpp 附带的不同的 gcc 版本

    在我开始更新 gcc 之前 是否有人真正尝试过这一点 他们能否确认需要从源代码构建 R 来更新用于使用 Rcpp 编译 c 代码的 gcc 版本 即不一定用于包创作 当然也不适用于 CRAN 有效 包 请参阅德克对此问题的回答 以及原发帖者
  • ValueError:num 必须为 1 <= num <= 2,而不是 3

    我有以下内容dataframe我使用生成的pivot table 我正在使用以下代码boxplot多列 fig plt figure for i in range 0 25 ax plt subplot 1 2 i 1 toPlot1 bo
  • 升级到 IntelliJ 14 后出现 Java 和 Scala ClassNotFoundException

    我最近升级到IntelliJ 14 然后添加Scala支持 我的主文件停止运行 例如 GUI 文件 它没有错误并且完全独立hello world测试此错误的样式 Exception in thread main java lang Clas
  • 如何让 div 到达页面顶部后随页面向下滚动?

    我知道标题有点令人困惑 D 但基本上我想要做的事情已经在这个网站上清楚地展示了http 9gag com http 9gag com向下滚动并注意侧边栏 有 2 个广告 一旦第二个广告到达页面顶部 它就会开始向下滚动页面 我想知道如何做到这
  • 用于在基于着色器的游戏中进行渲染的 OO 架构

    在构建游戏引擎时 我一直遇到这个问题 我的类希望看起来像这样 interface Entity draw class World draw for e in entities e draw 这只是伪代码 大致展示了绘图是如何发生的 每个实体
  • 错误:无法使用 Google Cloud Function 和 Express 处理请求

    这是我的代码 为什么当我访问云函数的 url 时 我收到此消息 错误 无法处理请求 但没有看到 Hello World 谢谢 exports simple req res gt var express require express var
  • 如何使用新语法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 C++ 在 Windows 上创建具有 UNICODE 路径的文件

    我想知道哪个 Win32 API 调用正在创建具有 UNICODE 路径的文件 只是为了确保 我在这里谈论的不是内容 而是文件路径 如果有人能用 MSDN 网址打我 我将不胜感激 这次我的 google fu 失败了 预先感谢一百万 See
  • R CRAN 检查中的注意事项 -- * 检查顶级文件... 注意 如果未安装“pandoc”,则无法检查文件 README.md

    我正在检查我的 R 包是否有 CRAN 提交 但有一个注释我无法删除 我用谷歌搜索了它 但似乎这个注释并不常见 因此我没有找到太多有用的信息 任何人都可以为我提供解决方案吗 以下是输出的一部分R CMD check as cran usin
  • 异常后重置 Cuda 上下文

    我有一个使用 Cuda C 的工作应用程序 但有时 由于内存泄漏 会引发异常 我需要能够实时重置 GPU 我的应用程序是服务器 因此它必须保持可用 我尝试过类似的方法 但似乎不起作用 try do process using GPU cat
  • ifstream 相当于 FILE * 的倒回方法

    我的任务是将一些 C 代码更新为 C 并且很好奇 ifstream 中 C FILE 的倒带方法的等效方法或实现是什么 那将是seekg http en cppreference com w cpp io basic istream see
  • 通过另一个列表过滤一个列表 C#

    我有以下业务对象 public class ItemCategoryBO public string ItemCategory get set public string Title get set public class ItemBO
  • 填充 std::tuple

    我有一个重载函数 如下所示 template
  • Javascript 获取 Flask json

    所以我试图将 Flask 服务器连接到前端创建反应应用程序 现在我只想验证我是否可以在两者之间发送 json 下面是每个错误的代码以及更多关于错误的描述 创建 React App 获取 import React Component from
  • 使用 Networkx 绘制带边的图

    我一直被一件很简单的事情所困扰 我正在尝试绘制并显示一个具有 2 个节点和 1 个边的图 但我收到这个错误 Traceback most recent call last File
  • 安装 MySQL-python

    我在尝试在我的 Ubuntu Linux Box 上安装 MySQL python 时遇到以下失败 从下面来看 问题似乎是sh mysql config not found有人可以建议我该怎么做吗 rmicro ubuntu pip ins
  • CSS 类定义在 元素内不起作用

    你们能告诉我为什么 css 类定义在下面的示例中不起作用吗 我正在使用 GWT 2 4 Chrome 17
  • 历史推送状态和滚动位置

    当用户使用 HTML5 popstate 处理程序导航回浏览器历史记录时 我尝试检索滚动位置 这是我所拥有的 document ready function window on popstate PopStateHandler link c
  • 是否可以像来自用户一样向 Bot Framework 发送消息?

    我正在使用 Direct Line 3 0 和 Microsoft Bot Framework 并要求网页将一些表单字段发送到机器人 就像用户发送它们一样 例如 当用户按下 提交 时 电子邮件 电话等字段将被发送到机器人 就像用户这样发送它
  • 获取精灵部分偏移量

    我正在尝试获取 elf 文件每个部分的偏移量和数据 我已经有了包含以下代码的部分名称 include