Target: Formatting

Signed-off-by: Patrick Pedersen <ctx.xda@gmail.com>
This commit is contained in:
Patrick Pedersen
2024-02-20 17:59:27 +01:00
parent 3bdbdd64eb
commit 019799ba2e

View File

@@ -27,41 +27,41 @@
const char DUMP_START_MAGIC[] = {0x10, 0xAD, 0xDA, 0x7A};
typedef uint32_t * reg_t;
typedef uint32_t *reg_t;
const volatile reg_t RCC_APB1ENR = (reg_t) 0x4002101Cu;
const volatile reg_t RCC_APB2ENR = (reg_t) 0x40021018u;
const volatile reg_t GPIOA_CRH = (reg_t) 0x40010804u;
const volatile reg_t GPIOA_CRL = (reg_t) 0x40010800u;
const volatile reg_t GPIOB_CRH = (reg_t) 0x40010C04u;
const volatile reg_t IO_B_MODE_L = (reg_t) 0x40010C00u;
const volatile reg_t USART1_CTRL = (reg_t) 0x40013800u;
const volatile reg_t USART2_CTRL = (reg_t) 0x40004400u;
const volatile reg_t USART3_CTRL = (reg_t) 0x40004800u;
const volatile reg_t RCC_APB1ENR = (reg_t)0x4002101Cu;
const volatile reg_t RCC_APB2ENR = (reg_t)0x40021018u;
const volatile reg_t GPIOA_CRH = (reg_t)0x40010804u;
const volatile reg_t GPIOA_CRL = (reg_t)0x40010800u;
const volatile reg_t GPIOB_CRH = (reg_t)0x40010C04u;
const volatile reg_t IO_B_MODE_L = (reg_t)0x40010C00u;
const volatile reg_t USART1_CTRL = (reg_t)0x40013800u;
const volatile reg_t USART2_CTRL = (reg_t)0x40004400u;
const volatile reg_t USART3_CTRL = (reg_t)0x40004800u;
volatile reg_t sel_usart_ctrl;
void readChar( uint8_t const chr );
void writeByte( uint8_t b );
void writeStr( uint8_t const * const str );
void writeChar( uint8_t const chr );
void writeWordLe( uint32_t const word );
void writeWordBe( uint32_t const word );
void readCmd( uint8_t const * const cmd);
uint32_t hexToInt(uint8_t const * const hex);
void readChar(uint8_t const chr);
void writeByte(uint8_t b);
void writeStr(uint8_t const *const str);
void writeChar(uint8_t const chr);
void writeWordLe(uint32_t const word);
void writeWordBe(uint32_t const word);
void readCmd(uint8_t const *const cmd);
uint32_t hexToInt(uint8_t const *const hex);
void readMem(uint32_t const addr, uint32_t const len);
void writeMem(uint32_t const addr, uint32_t const data);
uint8_t const strHelp[] = "Help\r\n-----------\r\n"
"ADDR, VAL, LEN: 32-bit Hex encoded:\r\n e.g., 0A1337FF\r\n"
"-----------\r\n"
"R ADDR LEN - Read 32-bit word\r\n"
"W ADDR VAL - Write 32-bit word\r\n"
"D - Dump all flash memory\r\n"
"S - Reboot\r\n"
"E - Exit\r\n"
"H - Show help \r\n"
"---------------\r\n";
uint8_t const strHelp[] = "Help\r\n-----------\r\n"
"ADDR, VAL, LEN: 32-bit Hex encoded:\r\n e.g., 0A1337FF\r\n"
"-----------\r\n"
"R ADDR LEN - Read 32-bit word\r\n"
"W ADDR VAL - Write 32-bit word\r\n"
"D - Dump all flash memory\r\n"
"S - Reboot\r\n"
"E - Exit\r\n"
"H - Show help \r\n"
"---------------\r\n";
#define PIN_CONFIG_ALT_PUSH_PULL 0xB
#define PIN_CONFIG_INPUT_PULL_UP 0x8
@@ -71,7 +71,7 @@ uint8_t const strHelp[] = "Help\r\n-----------\r\n"
reg_t init_usart1()
{
/* Enable Clocks */
*RCC_APB2ENR |= (1 << 2); // Input-Output Port A clock enable
*RCC_APB2ENR |= (1 << 2); // Input-Output Port A clock enable
*RCC_APB2ENR |= (1 << 14); // USART1 clock enable
/* Configure Pins */
@@ -96,7 +96,7 @@ reg_t init_usart1()
reg_t init_usart2()
{
/* USART2 clock enable */
*RCC_APB2ENR |= (1 << 2); // Input-Output Port A clock enable
*RCC_APB2ENR |= (1 << 2); // Input-Output Port A clock enable
*RCC_APB1ENR |= (1 << 17); // USART2 clock enable
/* Configure Pins */
@@ -157,42 +157,52 @@ int main(void)
// Flash size register, RM0008, page 1076:
// https://www.st.com/resource/en/reference_manual/rm0008-stm32f101xx-stm32f102xx-stm32f103xx-stm32f105xx-and-stm32f107xx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf
uint32_t flash_size = *(uint32_t*) 0x1FFFF7E0 & 0xFFFF;
if(flash_size == 64) // Force reading of the entire 128KB flash in 64KB devices, often used.
uint32_t flash_size = *(uint32_t *)0x1FFFF7E0 & 0xFFFF;
if (flash_size == 64) // Force reading of the entire 128KB flash in 64KB devices, often used.
flash_size = 128;
/* Print start magic to inform the attack board that
we are going to dump */
for (uint32_t i = 0; i < sizeof(DUMP_START_MAGIC); i++) {
for (uint32_t i = 0; i < sizeof(DUMP_START_MAGIC); i++)
{
writeChar(DUMP_START_MAGIC[i]);
}
uint32_t const * addr = (uint32_t*) 0x08000000;
while (((uintptr_t) addr) < (0x08000000U + (flash_size * 1024U) )) {
uint32_t const *addr = (uint32_t *)0x08000000;
while (((uintptr_t)addr) < (0x08000000U + (flash_size * 1024U)))
{
writeWordBe(*addr);
++addr;
}
}
/* hex must have length 8 */
uint32_t hexToInt(uint8_t const * const hex)
uint32_t hexToInt(uint8_t const *const hex)
{
uint32_t ind = 0u;
uint32_t res = 0u;
for (ind = 0; ind < 8; ++ind) {
for (ind = 0; ind < 8; ++ind)
{
uint8_t chr = hex[ind];
uint32_t val = 0u;
res <<= 4u;
if ((chr >= '0') && (chr <= '9')) {
if ((chr >= '0') && (chr <= '9'))
{
val = chr - '0';
} else if ((chr >= 'a') && (chr <= 'f')) {
}
else if ((chr >= 'a') && (chr <= 'f'))
{
val = chr - 'a' + 0x0a;
} else if ((chr >= 'A') && (chr <= 'F')) {
}
else if ((chr >= 'A') && (chr <= 'F'))
{
val = chr - 'A' + 0x0a;
} else {
}
else
{
val = 0u;
}
res |= val;
@@ -201,17 +211,19 @@ uint32_t hexToInt(uint8_t const * const hex)
return res;
}
void readChar( uint8_t const chr )
void readChar(uint8_t const chr)
{
#define CMDBUF_LEN (64u)
static uint8_t cmdbuf[CMDBUF_LEN] = {0u};
static uint32_t cmdInd = 0u;
switch (chr) {
switch (chr)
{
case '\n':
case '\r':
cmdbuf[cmdInd] = 0u;
if (cmdInd != 0) {
if (cmdInd != 0)
{
writeStr("\r\n");
}
readCmd(cmdbuf);
@@ -219,8 +231,9 @@ void readChar( uint8_t const chr )
writeStr("\r\n> ");
{
uint32_t ind = 0u;
for (ind = 0; ind<CMDBUF_LEN; ++ind) {
cmdbuf[ind]=0x00u;
for (ind = 0; ind < CMDBUF_LEN; ++ind)
{
cmdbuf[ind] = 0x00u;
}
}
break;
@@ -234,7 +247,8 @@ void readChar( uint8_t const chr )
break;
default:
if (cmdInd < (CMDBUF_LEN - 1)) {
if (cmdInd < (CMDBUF_LEN - 1))
{
cmdbuf[cmdInd] = chr;
++cmdInd;
writeChar(chr);
@@ -243,9 +257,10 @@ void readChar( uint8_t const chr )
}
}
void readCmd( uint8_t const * const cmd )
void readCmd(uint8_t const *const cmd)
{
switch (cmd[0]) {
switch (cmd[0])
{
case 0:
return;
break;
@@ -269,12 +284,14 @@ void readCmd( uint8_t const * const cmd )
case 'D':
writeStr("\r\n\r\n");
{
uint32_t const * addr = (uint32_t*) 0x08000000;
uint32_t const *addr = (uint32_t *)0x08000000;
uint32_t br = 8u;
while (((uintptr_t) addr) < (0x08000000 + 64u * 1024u)) {
if (br == 8u) {
while (((uintptr_t)addr) < (0x08000000 + 64u * 1024u))
{
if (br == 8u)
{
writeStr("\r\n[");
writeWordBe((uint32_t) addr);
writeWordBe((uint32_t)addr);
writeStr("]: ");
br = 0u;
}
@@ -298,19 +315,19 @@ void readCmd( uint8_t const * const cmd )
case 's':
case 'S':
writeStr("Rebooting...\r\n\r\n");
*((uint32_t *) 0xE000ED0C) = 0x05FA0004u;
*((uint32_t *)0xE000ED0C) = 0x05FA0004u;
break;
/* exit */
case 'e':
case 'E':
writeStr("Bye.\r\n");
while (1) {
while (1)
{
__asm__ volatile("wfi");
}
break;
default:
writeStr("Unknown command: ");
writeStr(cmd);
@@ -321,33 +338,34 @@ void readCmd( uint8_t const * const cmd )
const uint8_t txtMap[] = "0123456789ABCDEF";
void writeByte( uint8_t b )
void writeByte(uint8_t b)
{
writeChar(txtMap[b >> 4]);
writeChar(txtMap[b & 0x0F]);
}
void writeStr( uint8_t const * const str )
void writeStr(uint8_t const *const str)
{
uint32_t ind = 0u;
while (str[ind]) {
while (str[ind])
{
writeChar(str[ind]);
++ind;
}
}
void writeChar( uint8_t const chr )
void writeChar(uint8_t const chr)
{
while (!(sel_usart_ctrl[0] & 0x80u)) {
while (!(sel_usart_ctrl[0] & 0x80u))
{
/* wait */
}
sel_usart_ctrl[1] = chr;
}
void writeWordLe( uint32_t const word )
void writeWordLe(uint32_t const word)
{
writeByte((word & 0x000000FF));
writeByte((word & 0x0000FF00) >> 8);
@@ -355,7 +373,7 @@ void writeWordLe( uint32_t const word )
writeByte((word & 0xFF000000) >> 24);
}
void writeWordBe( uint32_t const word )
void writeWordBe(uint32_t const word)
{
writeChar((word & 0x000000FF));
writeChar((word & 0x0000FF00) >> 8);
@@ -363,13 +381,14 @@ void writeWordBe( uint32_t const word )
writeChar((word & 0xFF000000) >> 24);
}
void alertCrash( uint32_t crashId )
void alertCrash(uint32_t crashId)
{
writeStr("!!! EXCEPTION !!!\r\nID: ");
writeByte(crashId);
writeStr("\r\nRestart required!\r\n\r\n");
*((uint32_t *) 0xE000ED0C) = 0x05FA0004u;
while (1);
*((uint32_t *)0xE000ED0C) = 0x05FA0004u;
while (1)
;
}
void readMem(uint32_t const addr, uint32_t const len)
@@ -379,16 +398,18 @@ void readMem(uint32_t const addr, uint32_t const len)
uint32_t lenx = 0u;
lenx = len;
if (lenx == 0u) {
if (lenx == 0u)
{
lenx = 4u;
}
for (it = 0u; it < (lenx / 4u); ++it) {
addrx = addr + it*4u;
for (it = 0u; it < (lenx / 4u); ++it)
{
addrx = addr + it * 4u;
writeStr("Read [");
writeWordBe(addrx);
writeStr("]: ");
writeWordBe(*((uint32_t*)addrx));
writeWordBe(*((uint32_t *)addrx));
writeStr("\r\n");
}
}
@@ -399,6 +420,6 @@ void writeMem(uint32_t const addr, uint32_t const data)
writeWordBe(addr);
writeStr("]: ");
writeWordBe(data);
*((uint32_t*) addr) = data;
*((uint32_t *)addr) = data;
writeStr("\r\n");
}