如何从已编译的C程序中提取全局变量的值?
Keil构建了一个项目,代码中有一个数组,如下所示:如何从已编译的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的初始值,是否有方法在不从源代码重写预处理器的情况下捕获值,或者有
#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)。你期望它做什么?你说的是在运行时还是编译时?你说的是类似于初始化文件的东西,即在运行时读取以初始化变量或其他运行时行为???你说的“捕获”是什么意思?“获取价值”是什么意思?您想在运行程序时或不运行程序时“捕获值”?从“何处”应“捕获”这些值?