为什么我的可执行文件中的入口点地址是0x8048330(0x330是.text段的偏移量)

前端之家收集整理的这篇文章主要介绍了为什么我的可执行文件中的入口点地址是0x8048330(0x330是.text段的偏移量)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了一个小程序添加到整数,并使用“readelf -a executable_name”,它将elf标题中的入口点地址显示为:
Entry point address: 0x8048330

即使在装载程序加载到内存中之前,我的可执行程序也可以预先知道这个地址
elf_format.pdf说这个成员给出了系统首先传输控制的虚拟地址,从而启动了进程.任何人都可以解释这个语句的含义是什么,这里的虚拟地址的含义是什么?

也让我知道,可执行文件的值从0x8048330作为入口点地址.只是为了交叉检查,我编译了另一个程序,为此,入口点地址保持相同的值0x8048330(两种情况下的.text段的偏移量为0x330).

解决方法

输入地址由链接编辑器在创建时设置
可执行文件.加载器将程序文件映射到指定的地址
在将控制转移到入口地址之前,通过ELF头.

要使用具体的例子,请考虑以下几点:

% file a.out
a.out: ELF 32-bit LSB executable,Intel 80386,version 1 (SYSV),statically linked,\
    for GNU/Linux 2.6.15,not stripped
% readelf -e a.out
... snip ...
Elf file type is EXEC (Executable file)
Entry point 0x8048170
There are 6 program headers,starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000000 0x08048000 0x08048000 0x7cca6 0x7cca6 R E 0x1000
  LOAD           0x07cf98 0x080c5f98 0x080c5f98 0x00788 0x022fc RW  0x1000
... snip ...

第一个程序头指定文件内容
文件偏移0应映射到虚拟地址0x08048000.该
此段的文件和内存大小为0x7cca6字节.这个
段将被映射为可读和可执行但不可写
(它包含程序的代码).

ELF头中指定的入口点地址为0x8048170,其中
落在包含程序代码的区域内.

约翰·莱文(John Levine)的这本书“Linkers and Loaders”是对链接编辑器和装载机相关事宜的一个很好的资源.

原文链接:https://www.f2er.com/html/231022.html

猜你在找的HTML相关文章