8051单片机手工逆向练习

这里是学习过的过程,所以线写一个简单的C代码,下载进单片机,正常运行
项目为LED的闪烁  
 
 上代码

#include<STC15.h>

//ms delay
void Delayms(unsigned int ms)		//@11.0592MHz
{
	unsigned int i, j;

	for(i=0;i<ms;i++)
		for(j=0;j<990;j++);
		
}


main()
{
	
	P3M1    = 0X00;
	P3M0	= 0X30;

	P34=0;
	P35=1;
	
	while(1)
	{
		Delayms(1000);
		P34=~P34;
	}
}


下载进单片机,led指示灯闪烁

看下源代码
02 00 38 E4 FD FC C3 ED 9F EC 9E 50 15 E4 FB FA
0B BB 00 01 0A BA 03 F8 BB DE F5 0D BD 00 01 0C
80 E4 22 E4 F5 B1 75 B2 30 C2 B4 D2 B5 7F E8 7E
03 12 00 03 B2 B4 80 F5 78 7F E4 F6 D8 FD 75 81
07 02 00 23 00
把此代码保存为bin,用ida打开

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码到41,就完毕了,对反汇编代码进行整理,这里有的变量没有定义,需要处理掉这些变量,使汇编不报错,就OK了.

下面是汇编,asm,编译正常,

在这里插入图片描述

附上汇编代码 ,下面的地址编号,知识一个编号,没有过多的整理, 如果大家感兴趣可以对照C语言去整理一下,
如果是汇编写的代码,在来逆向的话,思路会清晰很多,下个案例我用汇编写,再手工逆出来,对比一下,这样学习

org 0000
code_RESET:
		ljmp	RESET_0
delayms:				
		clr	A
		mov	R5, A
		mov	R4, A
code_6:					
		clr	C
		mov	A, R5
		subb	A, R7
		mov	A, R4
		subb	A, R6
		jnc	code_22
		clr	A
		mov	R3, A
		mov	R2, A

code_10:				
		inc	R3
		cjne	R3, #0,	code_15
		inc	R2

code_15:			
		cjne	R2, #3,	code_10
		cjne	R3, #0xDE, code_10

		inc	R5
		cjne	R5, #0,	code_20
		inc	R4
code_20:				
		sjmp	code_6
code_22:				
		ret

wmain:				
		clr	A
		mov	0xb1, A	; 
		mov	0xb2, #0x30 
		clr	P3.4		
		setb	P3.5		

while_:				
		mov	R7, #0xE8 
		lcall	delayms	
		cpl	P3.4		
		sjmp	while_

RESET_0:
		mov	R0, #0x7F 
		clr	A

code_3B:		
		mov	@R0, A
		djnz	R0, code_3B
		mov	SP, #7	
		ljmp	wmain		
		
		end
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值