int32_t process_test_message(struct mile_message_header* msg_head, struct data_buffer* rbuf, struct data_buffer* sbuf) { int32_t result_code = MILE_RETURN_SUCCESS; MEM_POOL_PTR mem_pool; switch (msg_head->message_type) { case MT_TEST_REQ_ECHO: // echo message for testing. { mem_pool = mem_pool_init(MB_SIZE); const char *str = read_cstring(rbuf, mem_pool); log_debug("get echo message [%s]", str); write_int32(0, sbuf); write_int8(msg_head->version_major, sbuf); write_int8(msg_head->version_minor, sbuf); write_int16(MT_TEST_RES_ECHO, sbuf); write_int32(msg_head->message_id, sbuf); write_int32(strlen(str), sbuf); write_bytes((uint8_t *) str, strlen(str), sbuf); fill_int32(sbuf->data_len, sbuf, 0); result_code = MILE_RETURN_SUCCESS; mem_pool_destroy(mem_pool); } break; default: result_code = -1; break; } return result_code; }
void fill_nops(uint8_t *data, size_t size) { #if defined(__i386__) || defined(__x86_64__) memset(data, 0x90, size); /* NOPs */ #elif defined(__arm__) fill_int32(data, size, 0xe1a00000); /* NOP (MOV r0, r0) */ #else # error "Unknown arch" #endif }
void fill_hlts(uint8_t *data, size_t size) { #if defined(__i386__) || defined(__x86_64__) memset(data, 0xf4, size); /* HLTs */ #elif defined(__arm__) fill_int32(data, size, 0xe1266676); /* BKPT 0x6666 */ #else # error "Unknown arch" #endif }
void fill_hlts(uint8_t *data, size_t size) { #if defined(__i386__) || defined(__x86_64__) memset(data, 0xf4, size); /* HLTs */ #elif defined(__arm__) fill_int32(data, size, NACL_INSTR_ARM_HALT_FILL); #else # error "Unknown arch" #endif }
struct data_buffer *gen_ldb_control_packet(char *cmd, MEM_POOL *mem_pool) { // make cmd to full command while (strtok(NULL, " ")); struct data_buffer *dbuf = init_data_buffer(); // header write_int32(0, dbuf); write_int8(1, dbuf); write_int8(1, dbuf); write_int16(MT_CD_EXE_LDB_CONTROL, dbuf); write_int32(0, dbuf); //timeout write_int32(0, dbuf); write_int32(strlen(cmd), dbuf); write_bytes((uint8_t *)cmd, strlen(cmd), dbuf); fill_int32(dbuf->data_len, dbuf, 0); return dbuf; }