在我之前的文章中有提到了程序的构成和内涵。这篇了,在此基础上来点更深入的。
之前文章:关于C语言的一些思考【你真的理解了程序的本质吗?】
首先什么是dis 文件,它的作用是什么?
ARM生成的.dis文件是反汇编文件,它包含了ARM架构可执行文件的机器指令的文本表示。这些指令被转换成了人类可读的汇编语言形式,以便于程序员、逆向工程师或分析人员理解程序的执行流程、内存操作、寄存器使用等底层细节。
在.dis文件中,每条汇编指令都与其在可执行文件中的机器码相对应,并且通常包含以下信息:
标号地址:指令在可执行文件中的地址。
标号名字(如果有的话):用于标识特定代码块的名称,如函数名或代 码段名。
指令机器码:指令在二进制文件中的实际编码。
汇编指令:指令的文本表示,即人类可读的汇编语言形式。
它有什么用了? 它是解问题的重要帮手,特别是和MCU异常【如空指针】有关的问题,它的帮助有于神助。
它的作用就是用来debug,快速找到问题第一现场。
我们先来段代码:
#define GET_LR_VALUE(var) \
do {
\
__asm {
\
mov var, __return_address() \
} \
} while (0)
typedef void (* p_test_func)(void);
p_test_func p_test_func_1 = NULL;
void test_func_4(void)
{
unsigned int lr = 0;
int a= 0;
int b = 10;
int c = 0;
GET_LR_VALUE(lr);
c = a + b;
printf("sum c = %d lr = 0x%x \r\n", c ,lr);
}
void test_func_1(void)
{
printf("test_func_11111!!\r\n");
test_func_4();
}
void test_func_2(void)
{
printf("test_func_22222!!\r\n");
test_func_4();
}
void