免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3516 | 回复: 7
打印 上一主题 下一主题

如何获取当前进程在内存中的起始地址? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-09 16:20 |只看该作者 |倒序浏览
各位,如何获取当前进程在内存中的起始地址?我在看ELF格式,想试着修改一下当前进程的一些信息,但是需要知道当前进程的虚拟起始地址,找了一下没有找到相关的资料。。。。。

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
2 [报告]
发表于 2013-12-13 17:39 |只看该作者
时隔几年  我也有这个需求了 楼主你解决了吗?

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
3 [报告]
发表于 2013-12-13 18:23 |只看该作者
回复 2# socay2
我一般是这样找的:
readelf -h file能看到type。
当type为EXEC时,
readelf -l file能看到程序头,用第一段的虚拟地址减去Program Headers的偏移应当就是加载地址。


   

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
4 [报告]
发表于 2013-12-14 00:14 |只看该作者
回复 3# 井蛙夏虫

readelf 这个命令好
得好好研究下它查询出来的一些信息,不是很理解

  1. readelf -h a.out
  2. ELF Header:
  3.   Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  4.   Class:                             ELF32
  5.   Data:                              2's complement, little endian
  6.   Version:                           1 (current)
  7.   OS/ABI:                            UNIX - System V
  8.   ABI Version:                       0
  9.   Type:                              EXEC (Executable file)
  10.   Machine:                           Intel 80386
  11.   Version:                           0x1
  12.   Entry point address:               0x8048650
  13.   Start of program headers:          52 (bytes into file)
  14.   Start of section headers:          4476 (bytes into file)
  15.   Flags:                             0x0
  16.   Size of this header:               52 (bytes)
  17.   Size of program headers:           32 (bytes)
  18.   Number of program headers:         9
  19.   Size of section headers:           40 (bytes)
  20.   Number of section headers:         30
  21.   Section header string table index: 27
复制代码

  1. readelf -l a.out
  2. Elf file type is EXEC (Executable file)
  3. Entry point 0x8048650
  4. There are 9 program headers, starting at offset 52

  5. Program Headers:
  6.   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  7.   PHDR           0x000034 0x08048034 0x08048034 0x00120 0x00120 R E 0x4
  8.   INTERP         0x000154 0x08048154 0x08048154 0x00013 0x00013 R   0x1
  9.       [Requesting program interpreter: /lib/ld-linux.so.2]
  10.   LOAD           0x000000 0x08048000 0x08048000 0x00be4 0x00be4 R E 0x1000
  11.   LOAD           0x000f14 0x08049f14 0x08049f14 0x00140 0x0014c RW  0x1000
  12.   DYNAMIC        0x000f28 0x08049f28 0x08049f28 0x000c8 0x000c8 RW  0x4
  13.   NOTE           0x000168 0x08048168 0x08048168 0x00044 0x00044 R   0x4
  14.   GNU_EH_FRAME   0x000ac4 0x08048ac4 0x08048ac4 0x0003c 0x0003c R   0x4
  15.   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
  16.   GNU_RELRO      0x000f14 0x08049f14 0x08049f14 0x000ec 0x000ec R   0x1

  17. Section to Segment mapping:
  18.   Segment Sections...
  19.    00     
  20.    01     .interp
  21.    02     .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
  22.    03     .ctors .dtors .jcr .dynamic .got .got.plt .data .bss
  23.    04     .dynamic
  24.    05     .note.ABI-tag .note.gnu.build-id
  25.    06     .eh_frame_hdr
  26.    07     
  27.    08     .ctors .dtors .jcr .dynamic .got
复制代码

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
5 [报告]
发表于 2013-12-14 02:00 |只看该作者
回复 4# socay2
  1. Type:                              EXEC (Executable file)
  2. Elf file type is EXEC (Executable file)
复制代码
上面两句都可以看出这个文件是可执行文件
  1. There are 9 program headers, starting at offset 52
复制代码
可以看出偏移为52字节
  1. Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  2.   PHDR           0x000034 0x08048034 0x08048034 0x00120 0x00120 R E 0x4
复制代码
可以看出该段的虚拟地址为0x08048034。
两种相减就得到程序加载地址为0x08048000

   

论坛徽章:
0
6 [报告]
发表于 2013-12-14 10:28 来自手机 |只看该作者
socay2 发表于 2013-12-13 17:39:43
时隔几年  我也有这个需求了 楼主你解决了吗?

提供一个自己用过的方案。
用命令 objdump xxx.doc a.out把编译的东西拿出来直接就能看。具体命令格式你可以搜一搜。

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
7 [报告]
发表于 2013-12-15 00:15 |只看该作者
继续学习  谢谢楼上的两位兄台

论坛徽章:
0
8 [报告]
发表于 2013-12-15 01:52 来自手机 |只看该作者
socay2 发表于 2013-12-15 00:15:29
继续学习  谢谢楼上的两位兄台

做csapp拆弹实验时候用过。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP