链接器用内存地址替换符号引用
Linker replacing symbolic references with memory addresses?
从http://blog.jamesdbloom.com/JVMInternals.html我找到了这个
C/c++代码通常被编译成一个目标文件,然后多个目标文件被链接在一起,以产生一个可用的工件,如可执行文件或dll。在链接阶段,每个目标文件中的符号引用被替换为相对于最终可执行文件的实际内存地址。
如何在链接期间确定相对内存地址,如果运行可执行文件的操作系统是负责在运行时分配内存的操作系统,并且该内存在有空闲内存空间的地方分配(我对事情如何工作的理解)。
内存地址是相对于最终可执行文件的——它们不是绝对的,这在链接过程中是不可能确定的。
当一个可执行文件在Windows中运行时,操作系统会授予它一个固定大小的虚拟内存空间或虚拟地址空间,在32位操作系统上通常为4GB。每个进程都有自己的虚拟空间,可以在其中向内存读写数据。然后,将可执行文件和任何依赖项写入该空间,因此它们的位置现在是已知的,并且在VAS中。现在,在执行时,操作系统将获取链接器提供的相对地址并将其转换为绝对地址。这些由可执行文件在虚拟内存空间中的位置决定。
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 用符号版本替换对函数的所有调用
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何在给定文本中用字符数组替换符号
- C++ 如果要替换的句子具有"+"符号,则替换字符串功能不起作用
- 在编译时替换对象文件中的符号.例如,换掉main
- LD_PRELOAD应该加载模块还是只使用模块来替换符号
- 用字符串中的空格替换符号
- 使用指针将输入中的空格替换为破折号符号
- 如何查找字符串中的所有字符并将其替换为特定符号C++
- 将符号替换为表达式中的值并打印表达式输出
- 将 const 无符号字符* 分配给执行就地替换或省略的 std::string
- 如何有效地替换C++中的德语变音符号
- 是否可以用CMake将某个符号替换为不同的符号
- 链接器用内存地址替换符号引用
- 将正有符号变量替换为无符号变量
- 当一个符号替换几个符号时,是否存在从UTF-8到CP1251的音译?