如何从已编译的C程序中提取全局变量的值?

如何从已编译的C程序中提取全局变量的值?,c,gcc,keil,C,Gcc,Keil,Keil构建了一个项目,代码中有一个数组,如下所示: #define A_NUMBER 3 int i = 0; int intToBeRead[5] = { 0x01, 2, A_NUMBER, sizeof(i), #ifdef SHOULD_BE_FIVE 5 #else 6 #endif }; int main(void) { } 目标是捕获数组intToBeRead的初始值,是否有方法在不从源代码重写预处理器的情况下捕获值,或者有

Keil构建了一个项目,代码中有一个数组,如下所示:

#define A_NUMBER 3

int i = 0;
int intToBeRead[5] = {
    0x01,
    2,
    A_NUMBER,
    sizeof(i),
#ifdef SHOULD_BE_FIVE
    5
#else
    6
#endif
};

int main(void) {

}
目标是捕获数组
intToBeRead
的初始值,是否有方法在不从源代码重写预处理器的情况下捕获值,或者有方法从编译文件中捕获值

i、 e.通过使用另一个工具,数组的初始值可以存储在文本文件中,而与源代码无关


编辑:我使用的是一个带有c源代码的遗留存储库,有一个值列表(不同版本的更改)存储在需要捕获/导出的int数组中,然后可以在c源代码之外对其进行处理(将数组列表放入excel文件或数据库)。由于缺乏过程的早期规划,信息流是从源代码到外部(文本)文件的。

您可以使用诸如objdump之类的实用程序查看可执行文件中的内容。例如,在编译到名为x1的文件的代码上,此命令:

objdump-d-j.数据x1
显示包含变量的.data部分:


x1:文件格式elf64-x86-64
分解截面。数据:
0000000000601030 :
...
0000000000601040 :
601040:   01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00     ................
601050:   06 00 00 00                                         ....

从这里,您可以看到值(假设小endian)是1、2、3、4和6。

您可以使用诸如objdump之类的实用程序来查看可执行文件中的内容。例如,在编译到名为x1的文件的代码上,此命令:

objdump-d-j.数据x1
显示包含变量的.data部分:


x1:文件格式elf64-x86-64
分解截面。数据:
0000000000601030 :
...
0000000000601040 :
601040:   01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00     ................
601050:   06 00 00 00                                         ....

从这里,您可以看到值(假设小端数)是1、2、3、4和6。

请解释“捕获值”的含义?问题不清楚。将数组初始化为5个预先确定的
int
值,然后是一个无限循环`while(1)。你期望它做什么?你说的是在运行时还是编译时?你说的是类似于初始化文件的东西,即在运行时读取以初始化变量或其他运行时行为???你说的“捕获”是什么意思?“获取价值”是什么意思?您想在运行程序时或不运行程序时“捕获值”?从“何处”应“捕获”值?解释“捕获值”的含义?问题不清楚。将数组初始化为5个预先确定的
int
值,然后是一个无限循环`while(1)。你期望它做什么?你说的是在运行时还是编译时?你说的是类似于初始化文件的东西,即在运行时读取以初始化变量或其他运行时行为???你说的“捕获”是什么意思?“获取价值”是什么意思?您想在运行程序时或不运行程序时“捕获值”?从“何处”应“捕获”这些值?