mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-03 20:22:38 +00:00
coff: Let's support TI coff and tms320 files.
This commit is contained in:
parent
1dafb6b029
commit
d31c3623cc
@ -11,6 +11,7 @@ int coff_supported_arch(const ut8 *buf)
|
||||
case IMAGE_FILE_MACHINE_AMD64:
|
||||
case IMAGE_FILE_MACHINE_I386:
|
||||
case IMAGE_FILE_MACHINE_H8300:
|
||||
case IMAGE_FILE_TI_COFF:
|
||||
ret = R_TRUE;
|
||||
break;
|
||||
default:
|
||||
@ -24,7 +25,6 @@ static int r_bin_coff_init_hdr(struct r_bin_coff_obj *obj)
|
||||
{
|
||||
size_t offset = 0;
|
||||
|
||||
|
||||
obj->hdr.machine = *(ut16*)obj->b->buf;
|
||||
|
||||
switch(obj->hdr.machine) {
|
||||
@ -61,6 +61,15 @@ static int r_bin_coff_init_hdr(struct r_bin_coff_obj *obj)
|
||||
r_mem_copyendian((ut8*)&(obj->hdr.flags), obj->b->buf + offset,
|
||||
sizeof(ut16), obj->endian);
|
||||
|
||||
offset += sizeof(ut16);
|
||||
|
||||
if (obj->hdr.machine == IMAGE_FILE_TI_COFF) {
|
||||
r_mem_copyendian((ut8*)&(obj->hdr.target_id), obj->b->buf + offset,
|
||||
sizeof(ut16), obj->endian);
|
||||
|
||||
printf("%x\n", obj->hdr.target_id);
|
||||
}
|
||||
|
||||
return R_TRUE;
|
||||
}
|
||||
|
||||
@ -118,6 +127,10 @@ static int r_bin_coff_init_scn_hdr(struct r_bin_coff_obj *obj)
|
||||
{
|
||||
size_t i, offset = obj->hdr.opt_hdr_size + 20;
|
||||
|
||||
if (obj->hdr.machine == IMAGE_FILE_TI_COFF) {
|
||||
offset += 2;
|
||||
}
|
||||
|
||||
obj->scn_hdrs = calloc(obj->hdr.sections_num,
|
||||
sizeof(struct coff_scn_hdr));
|
||||
|
||||
|
@ -28,6 +28,22 @@
|
||||
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x169
|
||||
#define IMAGE_FILE_MACHINE_H8300 0x0083
|
||||
|
||||
#define IMAGE_FILE_TI_COFF 0xc1
|
||||
#define IMAGE_FILE_MACHINE_TMS470 0x0097
|
||||
#define IMAGE_FILE_MACHINE_TMS320C54 0x0098
|
||||
#define IMAGE_FILE_MACHINE_TMS320C60 0x0099
|
||||
#define IMAGE_FILE_MACHINE_TMS320C55 0x009C
|
||||
#define IMAGE_FILE_MACHINE_TMS320C28 0x009D
|
||||
#define IMAGE_FILE_MACHINE_MSP430 0x00A0
|
||||
#define IMAGE_FILE_MACHINE_TMS320C55PLUS 0x00A1
|
||||
|
||||
#define IMAGE_FLAGS_TI_F_RELFLG 0x0001
|
||||
#define IMAGE_FLAGS_TI_F_EXEC 0x0002
|
||||
#define IMAGE_FLAGS_TI_F_LNNO 0x0004
|
||||
#define IMAGE_FLAGS_TI_F_LSYMS 0x0008
|
||||
#define IMAGE_FLAGS_TI_F_BIG 0x0200
|
||||
#define IMAGE_FLAGS_TI_F_LITTLE 0x0100
|
||||
|
||||
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008
|
||||
#define IMAGE_SCN_CNT_CODE 0x00000020
|
||||
#define IMAGE_SCN_CNT_INIT_DATA 0x00000040
|
||||
@ -121,6 +137,7 @@ struct coff_hdr {
|
||||
ut32 symbols_num;
|
||||
ut16 opt_hdr_size;
|
||||
ut16 flags;
|
||||
ut16 target_id; // TI COFF specific
|
||||
};
|
||||
|
||||
struct coff_opt_hdr {
|
||||
|
@ -172,6 +172,22 @@ static RBinInfo *info(RBinFile *arch)
|
||||
strncpy(ret->arch, "h8300", R_BIN_SIZEOF_STRINGS);
|
||||
ret->bits = 16;
|
||||
break;
|
||||
|
||||
case IMAGE_FILE_TI_COFF:
|
||||
if (obj->hdr.target_id == IMAGE_FILE_MACHINE_TMS320C54) {
|
||||
strncpy(ret->machine, "c54x", R_BIN_SIZEOF_STRINGS);
|
||||
strncpy(ret->arch, "tms320", R_BIN_SIZEOF_STRINGS);
|
||||
ret->bits = 32;
|
||||
} else if (obj->hdr.target_id == IMAGE_FILE_MACHINE_TMS320C55) {
|
||||
strncpy(ret->machine, "c55x", R_BIN_SIZEOF_STRINGS);
|
||||
strncpy(ret->arch, "tms320", R_BIN_SIZEOF_STRINGS);
|
||||
ret->bits = 32;
|
||||
} else if (obj->hdr.target_id == IMAGE_FILE_MACHINE_TMS320C55PLUS) {
|
||||
strncpy(ret->machine, "c55x+", R_BIN_SIZEOF_STRINGS);
|
||||
strncpy(ret->arch, "tms320", R_BIN_SIZEOF_STRINGS);
|
||||
ret->bits = 32;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
strncpy(ret->machine, "unknown", R_BIN_SIZEOF_STRINGS);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user