为什么我的可执行文件中的入口点地址是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”是对链接编辑器和装载机相关事宜的一个很好的资源.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些