ios-kernel-patch/dump.c

52 lines
1.6 KiB
C
Raw Normal View History

2011-06-27 09:11:21 +07:00
#include <data/mach-o/binary.h>
static void dump(range_t range) {
prange_t pr = rangeconv(range, MUST_FIND);
write(1, pr.start, pr.size);
}
int main(int argc, char **argv) {
if(argc < 2) goto usage;
struct binary binary;
b_init(&binary);
2012-02-19 01:26:06 +07:00
for(int pass = 1; pass <= 2; pass++) {
for(char **arg = &argv[1]; *arg;) {
if(!strcmp(*arg, "-a")) {
if(!arg[1] || !arg[2]) goto usage;
if(pass == 2) {
2012-07-21 09:23:50 +07:00
dump((range_t) {&binary, parse_hex_addr(arg[1]), parse_hex_addr(arg[2])});
2012-02-19 01:26:06 +07:00
}
arg += 3;
} else if(!strcmp(*arg, "-A")) {
if(!arg[1] || !arg[2]) goto usage;
if(pass == 2) {
2012-07-21 09:23:50 +07:00
uint32_t start = parse_hex_addr(arg[1]);
dump((range_t) {&binary, start, parse_hex_addr(arg[2]) - start});
2012-02-19 01:26:06 +07:00
}
arg += 3;
} else if(!strcmp(*arg, "-s")) {
if(!arg[1]) goto usage;
if(pass == 2) {
dump(b_macho_segrange(&binary, arg[1]));
}
arg += 2;
} else if((*arg)[0] == '-') {
goto usage;
} else {
if(pass == 1) {
if(binary.valid) goto usage;
b_load_macho(&binary, *arg);
}
arg++;
}
2011-06-27 09:11:21 +07:00
}
2012-02-19 01:26:06 +07:00
if(!binary.valid) goto usage;
2011-06-27 09:11:21 +07:00
}
return 0;
usage:
2012-02-19 01:26:06 +07:00
fprintf(stderr, "Usage: dump binary [-a start len] [-A start end] [-s segname]\n");
2011-06-27 09:11:21 +07:00
return 1;
}