如何使用GNU ld将符号链接到特定的固定地址,以便二进制文件仍可以在Linux(x86)中正常执行?不会访问这些符号,但是它们的地址很重要。
例如,我将具有以下结构:
struct FooBar {
Register32 field_1;
Register32 field_2;
//...
};
struct FooBar foobar;
我想链接foobar
到地址0x76543210,但通常会链接标准库和应用程序的其余部分。然后,应用程序将使用foobar的地址,但不会引用其后面的(可能不存在)内存。
此请求的基本原理是,可以在两个平台上使用相同的源:在本机平台上,Register32
可以简单地是一个volatile uint32_t
,但是在Linux上Register32
是一个具有与a相同大小的C ++对象,该对象uint32_t
定义了eg
operator=
,然后将使用该地址并向具有该地址(和数据)的通信框架发送请求,以在远程硬件上执行实际访问。因此,链接器将确保Register32
结构的字段引用正确的“地址”。
由litb提出的使用建议--defsym symbol=address
确实可行,但是当您要映射数十个此类实例时,这会有些麻烦。但是,--just- symbols=symbolfile
这只是窍门。我花了一段时间才能找出的语法symbolfile
,这是
symbolname1 = address;
symbolname2 = address;
...
似乎需要空格,否则ld
报告file format not recognized; treating as linker script
。
问题内容: 我想在Linux中建立一个符号链接。我已经编写了此Bash命令,其中第一个路径是我要链接到的文件夹,第二个路径是已编译的源代码。 它是否正确? 问题答案: 要创建新的符号链接(如果符号链接已存在,将失败): 要创建或更新符号链接:
问题内容: 在DirectoryWalker类中,我想确定File实例是否实际上是指向目录的符号链接(假设Walker在UNIX系统上行走)。给定,我已经知道实例是一个目录,以下是否是确定符号链接的可靠条件? 问题答案: 这是Apache代码(根据其许可证使用),为了紧凑而进行了修改。
问题内容: 假设我的主文件夹中有文件夹〜/ a / b,并且文件夹b包含指向“ ..”的符号链接,名为“ symlink”。然后,我在bash中执行以下操作: pwd -P打印当前工作目录,并取消引用所有符号链接。为什么工作目录位于/ home / hm / a / b的末尾,而不是/ home / hm? 问题答案: 根据, 换句话说,是指使用 逻辑 结构,而实际上使用 物理 目录结构。 逻辑结
我在创建与laravel的符号链接以访问存储中的一些图像时遇到一些问题。。。 我将图像存储在文件夹中 我有图像1.png,2.png等等... 我使用php artisan命令创建链接 现在,当我尝试在视图中访问时,以下路径不起作用 我还需要做其他事情才能公开访问存储文件夹吗?
问题内容: 另一个Docker符号链接问题。我有一堆文件要复制到我的所有Docker构建中。我的目录结构是: 在上面的示例中,当我在dir1中进行docker构建时,我希望将file.txt复制过来。但是我不想维护file.txt的多个副本。每此链接,作为搬运工版本0.10,码头工人的作品必须 按照容器根目录内的符号链接获取ADD构建说明。 但是当我在Dockerfile中使用以下任一行进行构建时