elf 取路径_c – 获取主要可执行文件的ELF标题

由dlopen(0,RTLD_LAZY)返回的void *指针给出一个对应于主可执行文件的struct link_map *.

调用dl_iterate_phdr也会在首次执行回调时返回主可执行文件的条目.

你可能会被链接映射中的.l_addr == 0这个事实所困惑,而使用dl_iterate_phdr的那个dlpi_addr == 0.

这正在发生,因为l_addr(和dlpi_addr)实际上并没有记录ELF映像的加载地址.相反,它们记录已应用于该映像的重定位.

通常,主可执行文件的加载位置为0x400000(对于x86_64 Linux)或0x08048000(对于ix86 Linux),并且加载在相同的地址(即它们不被重新定位).

但是如果您将可执行文件与-pie标记相链接,那么它将链接到0x0,并将其重定位到其他地址.

那么如何到达ELF标题?简单:

#ifndef _GNU_SOURCE

#define _GNU_SOURCE

#endif

#include

#include

#include

static int

callback(struct dl_phdr_info *info,size_t size,void *data)

{

int j;

static int once = 0;

if (once) return 0;

once = 1;

printf("relocation: 0x%lx\n",(long)info->dlpi_addr);

for (j = 0; j < info->dlpi_phnum; j++) {

if (info->dlpi_phdr[j].p_type == PT_LOAD) {

printf("a.out loaded at %p\n",(void *) (info->dlpi_addr + info->dlpi_phdr[j].p_vaddr));

break;

}

}

return 0;

}

int

main(int argc,char *argv[])

{

dl_iterate_phdr(callback,NULL);

exit(EXIT_SUCCESS);

}

$gcc -m32 t.c && ./a.out

relocation: 0x0

a.out loaded at 0x8048000

$gcc -m64 t.c && ./a.out

relocation: 0x0

a.out loaded at 0x400000

$gcc -m32 -pie -fPIC t.c && ./a.out

relocation: 0xf7789000

a.out loaded at 0xf7789000

$gcc -m64 -pie -fPIC t.c && ./a.out

relocation: 0x7f3824964000

a.out loaded at 0x7f3824964000

更新:

Why does the man page say “base address” and not relocation?

这是一个bug

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法图解|5】javaScript求两个数的最大公约数

思路&#xff1a;采用辗转相除的方法&#xff0c;用大的数去除以小的那个数&#xff0c;然后再用小的数去除以的得到的余数&#xff0c;一直这样递归下去&#xff0c; 直到余数为0时&#xff0c;最后的被除数就是两个数的最大公约数。 function getMaxCommonDivisor(a, b) {if …

多线程编程反模式_编程反模式

多线程编程反模式您是否曾经进行过代码审查&#xff0c;记录了非常高的WTF / m&#xff1f; 您是否想知道所有这些错误代码的原因是什么&#xff1f; 在大多数情况下&#xff0c;导致原因1的原因是使用设计和编码反模式。 如果您喜欢定义&#xff0c;请参见以下内容&#xff1…

JavaScript 如何求两个数的最小公倍数

1 .用辗转相除法求最大公约数 算法描述: m对n求余传给自己&#xff0c;再次求余, 若余数等于0 则 n 为最大公约数 2.最小公倍数 两个数的积 / 最大公约数 基本思想是采用将两个数相乘&#xff0c;然后除以它们的最大公约数 function getMinCommonMultiple(a, b){return a * b …

数据挖掘10大算法详细介绍

想初步了解下怎样数据挖掘&#xff0c;看到一篇不错的文章转载过来啦~ 转自:http://blog.jobbole.com/89037/ 在一份调查问卷中&#xff0c;三个独立专家小组投票选出的十大最有影响力的数据挖掘算法&#xff0c;今天我打算用简单的语言来解释一下。 一旦你知道了这些算法是什么…

孙叫兽带你了解腾讯位置服务的认证与接入,多种行业方案参考!

前言:腾讯位置服务为各类应用厂商和开发者提供领先的LBS服务和解决方案;有针对Web应用的JavaScript API, 适合手机端Native APP的各种SDK, WebService接口,适合小程序的插件和各类地图API等。 目录 接入指南 地图组件(H5) 地图javaScri

svn切换分支 如何判断 是否完成_SVN创建分支/合并分支/切换分支

在建立项目版本库时&#xff0c;可首先建好项目文件夹&#xff0c;并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发trunk是主分支&#xff0c;是日常开发进行的地方。branches是分支。一些阶段性的release版本&#xff0c;这些版本是可以继续进行…

java文件读写操作类

借鉴了项目以前的文件写入功能&#xff0c;实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可&#xff08;可以是绝对或相对路径&#xff09; 以后使用时&#xff0c;可以在此基础上改进&#xff0c;比如&#xff1a; 写操作&#xff1a; 1&#xff0c;对java GUI中文…

java递归基础掉用_Java递归基础

java递归基础掉用对于那些不知道递归是什么的人&#xff08;并且像个大笑者一样&#xff09;&#xff0c;请单击以下链接&#xff1a;Google搜索&#xff1a;递归&#xff0c;然后单击“您的意思是……”项。 希望您终于弄清楚了递归是指其自身的任何内容&#xff08;如果不是&…

圣诞节,程序员应该给女朋友送一个线上圣诞树

前言:圣诞节虽然不是中国的传统节日,但当下很多时髦的年轻人却很喜欢过这个欢乐的节日,并乐于打造参与属于这个节日的仪式感。 除了所知的圣诞老人、圣诞树、互送礼物、吃大餐等传统习俗外,其实程序员能为今天的节日增加一些特别的环节。 圣诞树下载:https://download.csd…

maven 按业务拆分模块_Maven模块拆分方法

一个大项目经常要拆分成多个小模块分开打包&#xff0c;Maven是可以支持模块拆分的。可以包含(父模块即项目包含子模块)&#xff0c;也可以并行(父模块和子模块是平级的)。推荐用包含方式&#xff0c;更清晰&#xff0c;更简单一些。首先建个空项目&#xff0c;只要个pom.xml&a…

用户注册,报修

一、需求分析 &#xff08;1&#xff09;还没有注册的客户&#xff0c;可以进入注册界面进行注册。 &#xff08;2&#xff09;新建一个报修表&#xff0c;名字为repair_info0&#xff0c;列有用户名、报修类型、报修地点、报修内容&#xff0c;报修日期和时间、用户报修次数。…

Java SE 8新功能介绍:使用Streams API处理集合

使用Java SE 8 Streams的代码更干净&#xff0c;易读且功能强大..... 在“ Java SE 8新功能介绍”系列的这篇文章中&#xff0c;我们将深入解释和探索代码&#xff0c;以了解如何使用流遍历集合&#xff0c;从集合和数组创建流&#xff0c;聚合流值。 在上一篇文章“ Lambda的…

在HTML中使用css3实现雪人动画效果

背景:圣诞节又到了,拿什么来哄女朋友开心? 项目结构: html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht…

mysql 释放内存_mysql查询后释放内存

我正在使用CodeIgniter从远程服务器导入大表.我一次将查询分成1000行.这将是一个在后台运行的cron脚本.$userDB是本地数据库对象,而$remoteDB是远程数据库对象private function fetch_remote_db_table($remoteDB, $remoteTable, $localTable FALSE){$success FALSE;$returnOb…

linux线程池简单实例

linux线程池简单实例转载于:https://www.cnblogs.com/adong7639/p/5044685.html

圣诞节又到了,作为程序猿的我用代码给女朋友送了一个礼物

圣诞节又到了&#xff0c;拿什么来哄女朋友开心&#xff1f;我们先来做一个简单的雪人动画&#xff1a;项目结构&#xff1a;html:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d…

【Linux】权限篇(二)

权限目录 1. 前言2. 权限2.1 修改权限2.2 有无权限的对比2.3 另外一个修改权限的方法2.3.1 更改用户角色2.3.2 修改文件权限属性 3. 第一个属性列4. 目录权限5. 默认权限 1. 前言 在之前的一篇博客中分享了关于权限的一些知识&#xff0c;这次紧接上次的进行&#xff0c;有需要…

mysql 替代like_mysql用instr替代like查询

使用内部函数INSTR&#xff0c;代替传统的LIKE方式查询&#xff0c;不仅速度更快&#xff0c;而且省去了通配符检查&#xff0c;因此更加安全。INSTR()函数返回字符串中子字符串第一次出现的位置。如果在str中找不到子字符串&#xff0c;则INSTR()函数返回零(0)。下面说明了INS…

项目实战:小米商城官网及秒杀高仿(html+css+js)

导读:秒杀的检索结果,小米官方网站包含秒杀价格及秒杀适配机型,官方推荐秒杀产品,帮助米粉挑选合适自己的秒杀商品。 仿小米手机商城的全套页面。包含首页,订单页,列表页,商品详情页,个人中心,购物车,等等几十个页面。 有轮播的实现,demo 基于html css 实现小米官网部分内容搭…

Unity3d 配置OpenCV(EmguCV) 周围环境

最近毕业。我们一直在研究如何Unity正在使用EmguCV&#xff0c;最后&#xff0c;有些吃老本的今天。 我的环境&#xff1a;Unity3d 4.3.1f libemgucv-windows-universal-gpu-2.4.9.1847 原文參考&#xff1a;http://forum.unity3d.com/threads/182600-OpenCV-(EMGUC…