diff options
author | comex | 2015-01-17 22:24:13 -0500 |
---|---|---|
committer | comex | 2015-01-17 22:24:13 -0500 |
commit | d281e5233f304dab603d638a623ae54af8117ce7 (patch) | |
tree | 6605309de4f0e0728f7d9171528f376906af00f0 /test/test-transform-dis.c | |
parent | misc. objc trimmings (diff) | |
download | substitute-d281e5233f304dab603d638a623ae54af8117ce7.tar.gz |
improve test; thumb2 fixes
Diffstat (limited to 'test/test-transform-dis.c')
-rw-r--r-- | test/test-transform-dis.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/test-transform-dis.c b/test/test-transform-dis.c new file mode 100644 index 0000000..d7c44d6 --- /dev/null +++ b/test/test-transform-dis.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#define TRANSFORM_DIS_VERBOSE 1 +#include "transform-dis.c" +#include <stdlib.h> +int main(UNUSED int argc, char **argv) { + static uint8_t in[1048576]; + UNUSED size_t size = fread(in, 1, sizeof(in), stdin); + int patch_size = atoi(argv[1]); + int thumb = atoi(argv[2]); + uint8_t out[patch_size * 10]; + int offsets[patch_size + 1]; + void *rewritten_ptr = out; + printf("\n#if 0\n"); + int ret = transform_dis_main( + in, + &rewritten_ptr, + 0x10000, + 0x10000 + patch_size, + thumb, + offsets); + printf("=> %d\n", ret); + printf("#endif\n"); + int print_out_idx = 0; + int print_in_idx = 0; + if (!ret) { + printf("// total length: %zd\n", (uint8_t *) rewritten_ptr - out); + for(int ii = 0; ii <= patch_size; ii++) { + int oi = offsets[ii]; + if(oi != -1) { + int in_size = ii - print_in_idx; + int out_size = oi - print_out_idx; + if (in_size != out_size || memcmp(out + print_out_idx, in + print_in_idx, in_size)) { + printf("at_%x: nop; nop; nop\n", print_in_idx); + printf(" .byte "); + while(print_in_idx++ < ii) + printf("0x%02x%s", in[print_in_idx-1], print_in_idx == ii ? "" : ", "); + printf("\nnop // -->\n .byte "); + while(print_out_idx++ < oi) + printf("0x%02x%s", out[print_out_idx-1], print_out_idx == oi ? "" : ", "); + printf("\n"); + } + print_in_idx = ii; + print_out_idx = oi; + printf("/* 0x%x: 0x%x */\n", ii, oi); + } + } + } +} |