嵌入式进阶篇一 【dis文件】

在我之前的文章中有提到了程序的构成和内涵。这篇了,在此基础上来点更深入的。
之前文章:关于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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝晨若溪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值