SparkFun Forums 

Where electronics enthusiasts find answers.

Open source ARM Debugger
By fatalfeel
#187294
static int gdb_read_memory_packet(struct connection *connection,
char const *packet, int packet_size)
{
struct target *target = get_target_from_connection(connection);
char *separator;
uint32_t addr = 0;
uint32_t len = 0;

uint8_t *buffer;
char *hex_buffer;

int retval = ERROR_OK;

/* skip command character */
packet++;

addr = strtoul(packet, &separator, 16);

if (*separator != ',') {
LOG_ERROR("incomplete read memory packet received, dropping connection");
return ERROR_SERVER_REMOTE_CLOSED;
}

len = strtoul(separator + 1, NULL, 16);

if (!len) {
LOG_WARNING("invalid read memory packet received (len == 0)");
gdb_put_packet(connection, NULL, 0);
return ERROR_OK;
}

buffer = malloc(len); ---------> len is 1 , buffer address is 0x928dd0

LOG_DEBUG("addr: 0x%8.8" PRIx32 ", len: 0x%8.8" PRIx32 "", addr, len);

retval = target_read_buffer(target, addr, len, buffer);
...
...
...
}

//when call h_u32_to_le use 4 bytes, buf address 0x928dd0, same as buffer
static inline void h_u32_to_le(uint8_t* buf, int val)
{
buf[3] = (uint8_t) (val >> 24);
buf[2] = (uint8_t) (val >> 16);
buf[1] = (uint8_t) (val >> 8);
buf[0] = (uint8_t) (val >> 0);
}
~~~memory use

out of range