rizin/test/db/cmd/cmd_pc
Giovanni acc339fc2f
Add rz_lang_byte_array and remove rz_print_code (#2444)
* 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
2022-03-25 20:45:57 +08:00

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