⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 j-link v6/v7的反汇编原码
💻 C
字号:
#include "ioat91sam7s64.h"
#include <inarm.h>

#ifdef VER6
#define FIRMWARE_SIZE 0x6E00
#define FROM (0x100000+0x2000+FIRMWARE_SIZE)
#define TO (0x100000+0x2000)
#define BLOCK_SIZE 128
#include "396-v6.h"
#endif

#ifdef VER7
#define FIRMWARE_SIZE 0x6E00
#define FROM (0x100000+0x2000+FIRMWARE_SIZE)
#define TO (0x100000+0x2000)
#define BLOCK_SIZE 128
#include "396-v7.h"
#endif


//SN
__root const unsigned int sn @ 0xff00 = 10000001;


unsigned short CalcCrc (unsigned char *R4, int count)

{
	unsigned R0 = 0, R3, R5;
	R3 = 0x8408;
	for (;count != 0; count--)
	{
		R5 = R0;
		R0 = *R4;
		R4++;
		R0 ^= R5;
		for (int i = 8; i !=0; i--)
		{
			int last = R0;			
			R0 >>= 1;
			if (last & 1)
				R0 ^= R3;
		}
	}
	return R0;
}

__ramfunc void WriteBlock (unsigned *src, unsigned *dst)
{
	unsigned int i;
	unsigned *locdst;

	locdst = (unsigned *)(((unsigned)dst) &0x000fffff);
	for (i = 32; i!=0; i--)
		*locdst++ = *src++;
	*AT91C_MC_FCR = 0x5A000001 | ((unsigned)dst << 1) & 0x3FF00;
	while (!(*AT91C_MC_FSR & 1));
}


__ramfunc void CopyFirmware (void)
{
	int i;
	for (i = 0; i < FIRMWARE_SIZE; i+= BLOCK_SIZE)
		WriteBlock((unsigned *)(FROM + i), (unsigned *)(TO + i));
}

__ramfunc void MarkFirmfareInvalide ()
{
	int buf [32];
	int i;
	for (i = 0; i < 32; i++)
		buf[i] = 0;
	WriteBlock((unsigned*)buf, (unsigned*)FROM);
}

__ramfunc void ClearLockIfSet(int region)
{
	region &= 0xF;
	if (*AT91C_MC_FSR & ((1 << region) << 16))
	{
		*AT91C_MC_FCR = 0x5A000004 | (region << 8);
	}
	while (!(*AT91C_MC_FSR & 1));
}

unsigned char IsValideFirmware ()
{
	unsigned int *i = (unsigned int *)FROM;
	int cnt = 0;
	unsigned int result = 0;
	for (cnt = 0; cnt < 32; cnt++)
		result |= (*i++);
	if (result == 0)
		return 0;
	unsigned short crc = CalcCrc((unsigned char *) FROM, FIRMWARE_SIZE - 2);
	if (*(unsigned short*)(FROM + FIRMWARE_SIZE- 2) != crc)
		return 0;
	return 1;
}

int main()  
{

	int i;
	typedef void (*pfoo)();
	pfoo p = (pfoo) TO;
	
	for (i = 0; i < 16; i++)
			ClearLockIfSet(i);

	if (IsValideFirmware())
	{
			CopyFirmware();
			MarkFirmfareInvalide();
	}

	p();
	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -