2012-03-01 98 views
1

将二进制可执行文件加载到内存中时,可以使用十六进制编辑器和汇编代码中的符号对其进行反汇编甚至查看。这些总是以像0x804这样的东西开始的......我认为它是程序存储器部分。但是我的问题是,由于这些地址不是从程序开始的偏移量,所以二进制程序如何知道它将被加载到内存中的位置?二进制可执行文件如何知道它在内存中的位置?

+0

目前尚不清楚你在问什么。你在问一个正在运行的可执行文件如何确定它在内存中的位置?如果是这样,为什么需要知道?另外,您是否正在考虑一些特定的平台?请参阅本文档的[装载程序]部分(http://www.iecc.com/linker/linker08.html)。 – 2012-03-01 00:25:38

+0

我更多地询问程序中的地址是如何准确的。一个程序并不总是能够被加载到相同的位置,所以这些地址如何指向正确的东西。 – Jumhyn 2012-03-01 00:34:37

+0

是的,它可以。 http://en.wikipedia.org/wiki/Paging – 2012-03-01 00:38:23

回答

0

可执行文件通常有一个标题,其中一个字段是加载地址。

+0

但文件不能*总是*被加载到相同的位置,可以吗? – Jumhyn 2012-03-01 00:34:55

+0

在Windows上,EXE的默认加载位置是0x400000,EXE始终可用,除了预装载的系统DLL具有(其他)固定位置以外,始终是首先加载进程的EXE。 – 2012-03-01 00:42:19

+0

@Jhhyn什么可以展示一个可执行文件被加载在相同的位置?你是对的图书馆 - 该位置可以用于其他事情。但对于可执行文件,您正在为新的可执行文件创建一个新的地址空间,因此它全部免费开始。 – 2012-03-01 01:10:11

相关问题