【发布时间】:2024-01-12 21:14:01
【问题描述】:
是否有可能有一个(固定的)数组将其元素存储在可执行文件的只读段中而不是堆栈中?我想出了这段代码,但不幸的是,它在添加、移动或删除项目时非常不灵活。如何验证字符串确实存储在只读段中?我试过 readelf -a file 但它没有列出字符串。
typedef struct {
int len;
int pos[100];
char data[500];
} FixedStringArray;
const FixedStringArray items = {
4,
{ 9, 14, 19, 24 },
"LongWord1Word2Word3Word4"
} ;
char* GetItem(FixedStringArray *array, int idx, int *len) {
if (idx >= array->len) {
/* Out of range */
*len = -1;
return NULL;
}
if (idx > 0) {
*len = array->pos[idx] - array->pos[idx - 1];
return & array->data[array->pos[idx - 1]];
}
*len = array->pos[idx];
return & array->data[0];
}
void PrintItem(FixedStringArray array, int idx) {
int len;
char *c;
int i = 0;
c = GetItem(&array, idx, &len);
if (len == -1) return;
while (i < len) {
printf("%c", *c);
*c++;
i++;
}
}
我正在考虑为每个数组自动生成一个结构并为 pos 和 data 使用正确长度的脚本。在内存使用方面是否有任何问题? 或者创建一个结构(如上)来适应所有字符串会更好吗?
【问题讨论】: