问题标签 [relocation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory-management - 为什么每次都从同一个内存地址执行一个函数?
我正在反汇编一个可执行文件:
每次内存地址都是一样的:0x004012d0
.
内存地址不是由操作系统动态分配的吗?
更新
现在我看到它是虚拟空间,它可以在某些平台上随机化。
有人可以发布一个改变的 gdb 转储吗?
linker - NASM x86_64 中的重定位被截断以适应错误
我正在使用配备 Intel Core 2 CPU 和 2GB RAM 的计算机。我的操作系统是 Ubuntu 9.04。当我尝试编译此代码时:
当我编译此代码“NASM -f bin UARTLOOP.asm”时,编译器可以创建 UARTLOOP.o 文件而不会出现任何错误。当我尝试将 .o 文件与“ld UARTLOOP.o”链接时,它告诉:
你有一些想法来解决这个问题吗?谢谢=)
更新
的输出nasm -hf
是:
用法:nasm [-@ response file] [-o outfile] [-f format] [-l listfile] [options...] [--] 文件名或 nasm -v 获取版本信息
android - 如何扩展 SomeActivity 以重新定位例如 onCreateOptionsMenu?
我知道这应该相当简单,但我还是不明白。
我有一个 Activity (我们称之为XyActivity)已经很长了。因此,我想将一些被覆盖的方法重新定位到子类(我们称之为XyOptions)。看起来像这样:
和
不幸的是,XyOptions中的方法永远不会被调用。我不明白为什么。我敢肯定答案是微不足道的,所以请指出我的方向。
谢谢,
斯特夫
c++ - 链接器是做什么的?
我一直想知道。我知道编译器会将您编写的代码转换为二进制文件,但链接器是做什么的?他们对我来说一直是个谜。
我大致了解什么是“链接”。这是对库和框架的引用被添加到二进制文件中的时候。我不明白除此之外的任何事情。对我来说,它“有效”。我也了解动态链接的基础知识,但没有太深。
有人可以解释这些条款吗?
c - 为什么 main 函数总是加载在同一个地址,而变量大部分时间都有不同的地址?
我今天写了这个小程序,结果让我大吃一惊。这是程序
在我的机器上,主函数总是加载到地址“0x80483d4”并且变量的地址不断变化这是怎么发生的?我在操作系统中读到,作为虚拟化方案的一部分,操作系统不断重新定位指令的地址。那么为什么每次我运行这个程序时,main 都加载到同一个地址?
提前谢谢你们。
c++ - 如何应用 DOP 并保持良好的用户界面?
目前我想为控制台优化我的 3d 引擎。更准确地说,我希望对缓存更加友好,并让我的结构更加面向数据,但也希望保持我漂亮的用户界面。
例如:
所以用户可以在他的代码中使用接口指针。
但是
在我的引擎中,我目前存储指向场景节点的指针。
因此,在面向数据的设计中,最好使用数组结构而不是结构数组。所以我的节点从...
对这个...
因此,如果我想应用 DOP,我会在这里看到两个问题。首先,我如何在不让用户使用 ID、索引等的情况下保持我漂亮的用户界面?
其次,当某些向量调整大小而不让用户界面指针指向必杀技时,如何处理属性重定位?
目前我的想法是实现一种handle_vector,您可以从中获得持久“指针”的句柄:
因此,当实习生 std::vector 调整大小时,它会更新其句柄。“句柄”存储指向实际对象的指针,并且“->”运算符被重载以实现良好的包装。但这种方法对我来说听起来有点复杂?!
你怎么看?如何保持良好的界面,但在内存中保持连续思考以更好地使用缓存?
谢谢你的帮助!
memory-management - 段的静态重定位或静态重定位是什么意思
elf 格式的可执行文件包含各种段,如代码、数据、bss、堆栈等。如果我们说段 xyz 是静态重定位的,那意味着什么?
elf 格式的二进制文件包含每个段的相对地址。当我们说静态重定位时,是否意味着相对地址实际上是物理地址?
gcc - 64 位平台上的 ELF 对象文件大小限制是多少?
假设 x86 64 和 linux 平台。
如果查看 ELF 标头,偏移量都是 64 位的。
所以用relocatoin R_X86_64_64很容易创建大于4G的目标文件。这意味着静态 .o 文件和可执行文件可以与 64 位一样大。
但是,对于像 gcc 这样的共享库,我们只有 R_X86_64_PLT32 重定位。这意味着创建大于 4GB 的共享库是不可能的,对吧?
因此,如果我想构建一个庞大的程序,其中一个 .o 文件足够大 (>4GB) ,唯一的选择是静态链接吗?
欢迎任何评论。
谢谢,利米
svn - Subversion SVN:存储库已被移动存储库永久移动到 XXX 请重新定位
我现在不了解 SVN。当我更改文件并尝试更新时,它给了我以下错误:
据我所知,我没有更改存储库的地址或任何东西。其他客户端也有同样的错误,因此存储库似乎有问题,而不是 svn 客户端。有什么建议么?我的存储库的地址是“/var/svn/repository”,这是我的 Apache-Config 中的 Location-tag:
这是我的存储库的结构:
更新:
我的工作副本中的 svn info 命令给了我以下结果:
arm - 带有可重定位代码的静态局部变量的问题
我正在构建一个在裸机上具有可重定位代码的项目。它是一个 Cortex M3 嵌入式应用程序。我没有动态链接器,并且在我的启动代码中实现了所有重定位。
大多数情况下它正在工作,但我的本地静态变量似乎定位不正确。它们的地址被我的可执行文件在内存中的偏移量所抵消——即我编译我的代码,就好像它是在内存位置 0 加载但我实际上将它加载到位于 0x8000 的内存中一样。静态局部变量的内存地址偏移量为 0x8000,这是不好的。
我的全局变量由 GOT 正确定位,但静态局部变量根本不在 GOT 中(至少在我运行时它们没有出现readelf -r
)。我正在编译我的代码,并且-fpic
链接器已经指定了。我认为我必须缺少一个编译和/或链接选项来指示将 GOT 用于静态局部变量或指示它对它们使用绝对寻址。 -fpic
-pie
gcc
似乎当前代码将 PC 添加到静态局部变量的位置。