Tag: 链接器脚本

什么是绝对符号以及如何在C中定义它?

在nm的手册页中。 它说 “A”符号的值是绝对值,不会因进一步链接而改变。 但是,我不知道这意味着什么。 如何定义变量或其他东西以使其值在C中绝对? 如果我在test.c中的文件范围中声明一个变量 int a; 然后在nm的输出中,a的条目将在我的机器上进行以下操作 0000000000000004 C a 所以我想知道我该怎么做才能使变量的nm输出为“A”。 我不知道“绝对”是什么意思。

可执行文件中全局const变量的偏移量

希望有一个可执行文件通过修改自己的全局常量来保存其状态。 只是为了拥有一个完全独立的可执行文件。 想到的一些解决方案/黑客: 使用libelf并让程序解析自己以找到偏移量。 添加特定标记,然后在可执行文件中搜索它。 我想这甚至可能有点跨平台? 使用对象转储工具来确定可执行文件中的地址。 这可能需要始终作为项目构建的后期处理来完成。 让链接器提供此信息是很好的。 是否可以让链接器提供可执行文件中只读部分的偏移量? 谢谢

链接器脚本.relocate部分的第一个符号_srelocate是不正确的(GCC Bug?)

问题 我的问题是,当我使用以下脚本打算将代码放入RAM时,重定位部分会填充虚假数据。 我的问题是: 为什么_srelocate符号比_srelocate符号大4个字节? 它们不应该是一样的吗? 另外,如果1.的答案为NO,我不应该从_etext + 4复制到_srelocate吗? 背景和相关代码 我正在使用Atmel ATSAM3N4X系列处理器(ARM Cortex M3),并希望对我的链接器脚本和.relocate部分初始化有所帮助。 原因是_etext符号比_srelocate符号小4个字节。 以下链接描述文件是Atmel Studio 6生成的默认脚本(如果您希望ram / rom符号位置看到问题的Apendix )。 /* —————————————————————————- * SAM Software Package License * —————————————————————————- * Copyright (c) 2012, Atmel Corporation * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, […]