* Added rz_lang_byte_array and removed rz_print_code + refactoring cmds * Added test for big endian * Removed vlang and sync oldshell with newshell cmd changes * Fixed in a more portable way conversion on signed byte for Java/Kotlin * Resolved comments and added examples to help users
272 lines
8.7 KiB
Text
272 lines
8.7 KiB
Text
NAME=Print bytes as C/C++ byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pc @! 30
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 30
|
|
const uint8_t array[ARRAY_SIZE] = {
|
|
0x80, 0x40, 0x2d, 0xe9, 0x00, 0x70, 0x8d, 0xe2, 0x00, 0x02, 0x00, 0xe3, 0x01, 0x00, 0x40, 0xe3,
|
|
0xf1, 0xff, 0xff, 0xeb, 0x00, 0x30, 0xb0, 0xe3, 0x03, 0x00, 0xa0, 0xe1, 0xf1, 0xff
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as C/C++ byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pc
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 256
|
|
const uint8_t array[ARRAY_SIZE] = {
|
|
0x80, 0x40, 0x2d, 0xe9, 0x00, 0x70, 0x8d, 0xe2, 0x00, 0x02, 0x00, 0xe3, 0x01, 0x00, 0x40, 0xe3,
|
|
0xf1, 0xff, 0xff, 0xeb, 0x00, 0x30, 0xb0, 0xe3, 0x03, 0x00, 0xa0, 0xe1, 0xf1, 0xff, 0xff, 0xeb,
|
|
0x80, 0x80, 0xbd, 0xe8, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3,
|
|
0xf2, 0xff, 0xff, 0xeb, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3, 0x00, 0xf0, 0x20, 0xe3,
|
|
0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as C/C++ half-word (2 bytes value) array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=<<EOF
|
|
pch @! 30
|
|
pch
|
|
pch @! 1
|
|
EOF
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 15
|
|
const uint16_t array[ARRAY_SIZE] = {
|
|
0x4080, 0xe92d, 0x7000, 0xe28d, 0x0200, 0xe300, 0x0001, 0xe340,
|
|
0xfff1, 0xebff, 0x3000, 0xe3b0, 0x0003, 0xe1a0, 0xfff1
|
|
};
|
|
#define ARRAY_SIZE 128
|
|
const uint16_t array[ARRAY_SIZE] = {
|
|
0x4080, 0xe92d, 0x7000, 0xe28d, 0x0200, 0xe300, 0x0001, 0xe340,
|
|
0xfff1, 0xebff, 0x3000, 0xe3b0, 0x0003, 0xe1a0, 0xfff1, 0xebff,
|
|
0x8080, 0xe8bd, 0xf000, 0xe320, 0xf000, 0xe320, 0xf000, 0xe320,
|
|
0xfff2, 0xebff, 0xf000, 0xe320, 0xf000, 0xe320, 0xf000, 0xe320,
|
|
0x6548, 0x6c6c, 0x206f, 0x6f57, 0x6c72, 0x0064, 0x0000, 0x0000,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
|
|
0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
|
|
};
|
|
// Warning: the number of available bytes is less than 2
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as C/C++ half-word (2 bytes value) array (big endian).
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pch @! 30 @e:cfg.bigendian=true
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 15
|
|
const uint16_t array[ARRAY_SIZE] = {
|
|
0x8040, 0x2de9, 0x0070, 0x8de2, 0x0002, 0x00e3, 0x0100, 0x40e3,
|
|
0xf1ff, 0xffeb, 0x0030, 0xb0e3, 0x0300, 0xa0e1, 0xf1ff
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as C/C++ word (4 bytes value) array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=<<EOF
|
|
pcw @! 30
|
|
pcw @! 3
|
|
EOF
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 7
|
|
const uint32_t array[ARRAY_SIZE] = {
|
|
0xe92d4080u, 0xe28d7000u, 0xe3000200u, 0xe3400001u,
|
|
0xebfffff1u, 0xe3b03000u, 0xe1a00003u
|
|
};
|
|
// Warning: the number of available bytes is less than 4
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as C/C++ word (4 bytes value) array (big endian).
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcw @! 30 @e:cfg.bigendian=true
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 7
|
|
const uint32_t array[ARRAY_SIZE] = {
|
|
0x80402de9u, 0x00708de2u, 0x000200e3u, 0x010040e3u,
|
|
0xf1ffffebu, 0x0030b0e3u, 0x0300a0e1u
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as C/C++ double-word (8 bytes value) array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=<<EOF
|
|
pcd @! 30
|
|
pcd @! 7
|
|
EOF
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 3
|
|
const uint64_t array[ARRAY_SIZE] = {
|
|
0xe28d7000e92d4080ull, 0xe3400001e3000200ull,
|
|
0xe3b03000ebfffff1ull
|
|
};
|
|
// Warning: the number of available bytes is less than 8
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as C/C++ double-word (8 bytes value) array (big endian).
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcd @! 30 @e:cfg.bigendian=true
|
|
EXPECT=<<EOF
|
|
#define ARRAY_SIZE 3
|
|
const uint64_t array[ARRAY_SIZE] = {
|
|
0x80402de900708de2ull, 0x000200e3010040e3ull,
|
|
0xf1ffffeb0030b0e3ull
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as rizin command.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pc* @! 30
|
|
EXPECT=<<EOF
|
|
wx 80402de900708de2000200e3010040e3 ; sd +16
|
|
wx f1ffffeb0030b0e30300a0e1f1ff ; sd -30
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as assembly.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pca @! 30
|
|
EXPECT=<<EOF
|
|
byte_array:
|
|
.byte 0x80, 0x40, 0x2d, 0xe9, 0x00, 0x70, 0x8d, 0xe2, 0x00, 0x02, 0x00, 0xe3, 0x01, 0x00, 0x40, 0xe3
|
|
.byte 0xf1, 0xff, 0xff, 0xeb, 0x00, 0x30, 0xb0, 0xe3, 0x03, 0x00, 0xa0, 0xe1, 0xf1, 0xff
|
|
.equ byte_array_len, 30
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as a bash command.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcb @! 30
|
|
EXPECT=<<EOF
|
|
printf "\200\100\055\351\000\160\215\342\000\002\000\343\001\000\100\343" > data.bin
|
|
printf "\361\377\377\353\000\060\260\343\003\000\240\341\361\377" >> data.bin
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as golang byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcg @! 30
|
|
EXPECT=<<EOF
|
|
byteArray := []byte{
|
|
0x80, 0x40, 0x2d, 0xe9, 0x00, 0x70, 0x8d, 0xe2, 0x00, 0x02, 0x00, 0xe3, 0x01, 0x00, 0x40, 0xe3,
|
|
0xf1, 0xff, 0xff, 0xeb, 0x00, 0x30, 0xb0, 0xe3, 0x03, 0x00, 0xa0, 0xe1, 0xf1, 0xff,
|
|
}
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as Java byte array (uses signed bytes).
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcJ @! 30
|
|
EXPECT=<<EOF
|
|
byte[] byteArray = new byte[] {
|
|
-128, 64, 45, -23, 0, 112, -115, -30, 0, 2, 0, -29, 1, 0, 64, -29,
|
|
-15, -1, -1, -21, 0, 48, -80, -29, 3, 0, -96, -31, -15, -1,
|
|
};
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as json byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcj @! 30
|
|
EXPECT=<<EOF
|
|
[128,64,45,233,0,112,141,226,0,2,0,227,1,0,64,227,241,255,255,235,0,48,176,227,3,0,160,225,241,255]
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as Kotlin byte array (uses signed bytes).
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pck @! 30
|
|
EXPECT=<<EOF
|
|
val byteArray = byteArrayOf(
|
|
-128, 64, 45, -23, 0, 112, -115, -30, 0, 2, 0, -29, 1, 0, 64, -29,
|
|
-15, -1, -1, -21, 0, 48, -80, -29, 3, 0, -96, -31, -15, -1,
|
|
);
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as NodeJS buffer.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcn @! 30
|
|
EXPECT=<<EOF
|
|
var byteArray = new Buffer('gEAt6QBwjeIAAgDjAQBA4/H//+sAMLDjAwCg4fH/', 'base64');
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as Objective-C/C++ byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pco @! 30
|
|
EXPECT=<<EOF
|
|
NSData *byteArray = [[NSData alloc] initWithBytes:{
|
|
0x80, 0x40, 0x2d, 0xe9, 0x00, 0x70, 0x8d, 0xe2, 0x00, 0x02, 0x00, 0xe3, 0x01, 0x00, 0x40, 0xe3,
|
|
0xf1, 0xff, 0xff, 0xeb, 0x00, 0x30, 0xb0, 0xe3, 0x03, 0x00, 0xa0, 0xe1, 0xf1, 0xff
|
|
}];
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as Python byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcp @! 30
|
|
EXPECT=<<EOF
|
|
byteArray = b'\x80\x40\x2d\xe9\x00\x70\x8d\xe2\x00\x02\x00\xe3\x01\x00\x40\xe3'
|
|
byteArray += b'\xf1\xff\xff\xeb\x00\x30\xb0\xe3\x03\x00\xa0\xe1\xf1\xff'
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as Rust byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcr @! 30
|
|
EXPECT=<<EOF
|
|
let _: [u8; 30] = [
|
|
0x80, 0x40, 0x2d, 0xe9, 0x00, 0x70, 0x8d, 0xe2, 0x00, 0x02, 0x00, 0xe3, 0x01, 0x00, 0x40, 0xe3,
|
|
0xf1, 0xff, 0xff, 0xeb, 0x00, 0x30, 0xb0, 0xe3, 0x03, 0x00, 0xa0, 0xe1, 0xf1, 0xff
|
|
];
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as Swift byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcs @! 30
|
|
EXPECT=<<EOF
|
|
let byteArray : [UInt8] = [
|
|
0x80, 0x40, 0x2d, 0xe9, 0x00, 0x70, 0x8d, 0xe2, 0x00, 0x02, 0x00, 0xe3, 0x01, 0x00, 0x40, 0xe3,
|
|
0xf1, 0xff, 0xff, 0xeb, 0x00, 0x30, 0xb0, 0xe3, 0x03, 0x00, 0xa0, 0xe1, 0xf1, 0xff
|
|
];
|
|
EOF
|
|
RUN
|
|
|
|
NAME=Print bytes as Yara byte array.
|
|
FILE=bins/elf/analysis/hello-arm32
|
|
CMDS=pcy @! 30
|
|
EXPECT=<<EOF
|
|
$byteArray = {
|
|
80 40 2d e9 00 70 8d e2 00 02 00 e3 01 00 40 e3
|
|
f1 ff ff eb 00 30 b0 e3 03 00 a0 e1 f1 ff
|
|
};
|
|
EOF
|
|
RUN
|