Permalink
Browse files

update and add nm

  • Loading branch information...
1 parent ec9980e commit 4f0405def62e8cd6a190731de3f854c3ac326286 @comex committed Jun 4, 2011
Showing with 56 additions and 20 deletions.
  1. +2 −2 Makefile
  2. +3 −4 apply_patchfile.c
  3. +4 −5 check_sanity.c
  4. +3 −4 dump_range.c
  5. +5 −5 make_kernel_patchfile.c
  6. +39 −0 nm.c
View
@@ -2,7 +2,7 @@ DATA = $(word 1,$(wildcard ./data ../data))
CFLAGS += -I$(DATA)
include $(DATA)/Makefile.common
-BINS := $(OUTDIR)/check_sanity $(OUTDIR)/make_kernel_patchfile $(OUTDIR)/apply_patchfile $(OUTDIR)/dump_range sandboxc.c
+BINS := $(OUTDIR)/check_sanity $(OUTDIR)/make_kernel_patchfile $(OUTDIR)/apply_patchfile $(OUTDIR)/dump_range $(OUTDIR)/nm sandboxc.c
all: .data $(OUTDIR) $(BINS)
@@ -22,7 +22,7 @@ $(OUTDIR)/make_kernel_patchfile: $(OUTDIR)/make_kernel_patchfile.o $(OUTDIR)/san
$(GCC) -o $@ $^
$(OUTDIR)/dump_range: $(OUTDIR)/dump_range.o $(DATA)/$(OUTDIR)/libdata.a
$(GCC) -o $@ $^
-$(OUTDIR)/fakesym: $(OUTDIR)/fakesym.o $(DATA)/$(OUTDIR)/libdata.a
+$(OUTDIR)/nm: $(OUTDIR)/nm.o $(DATA)/$(OUTDIR)/libdata.a
$(GCC) -o $@ $^
clean: .clean
View
@@ -1,5 +1,4 @@
-#include <data/common.h>
-#include <data/binary.h>
+#include <data/mach-o/binary.h>
#include <assert.h>
int main(int argc, char **argv) {
@@ -8,7 +7,7 @@ int main(int argc, char **argv) {
b_init(&binary);
mode_t mode;
prange_t kernel = load_file(argv[1], true, &mode);
- b_prange_load_macho(&binary, kernel, argv[1]);
+ b_prange_load_macho(&binary, kernel, 0, argv[1]);
int patchfd = open(argv[2], O_RDONLY);
if(patchfd == -1) {
@@ -55,7 +54,7 @@ int main(int argc, char **argv) {
printf("%s (0x%x)\n", name, addr);
}
- memcpy((char *) kernel.start + range_to_off_range((range_t) {&binary, addr, size}).start, stuff, size);
+ memcpy((char *) kernel.start + range_to_off_range((range_t) {&binary, addr, size}, MUST_FIND).start, stuff, size);
skip:
View
@@ -1,6 +1,5 @@
-#include <data/common.h>
-#include <data/binary.h>
-#include <data/loader.h>
+#include <data/mach-o/binary.h>
+#include <data/mach-o/headers/loader.h>
#include <stdlib.h>
#include <stdio.h>
@@ -11,9 +10,9 @@ int main(int argc, char **argv) {
}
struct binary binary;
b_init(&binary);
- b_load_macho(&binary, argv[1], false);
+ b_prange_load_macho(&binary, load_file(argv[1], false, NULL), 0, argv[1]);
int result = 0;
- CMD_ITERATE(binary.mach_hdr, cmd) {
+ CMD_ITERATE(binary.mach->hdr, cmd) {
if(cmd->cmd == LC_SEGMENT) {
struct segment_command *seg = (void *) cmd;
uint32_t start = seg->vmaddr;
View
@@ -1,5 +1,4 @@
-#include <data/common.h>
-#include <data/binary.h>
+#include <data/mach-o/binary.h>
int main(int argc, char **argv) {
if(argc != 4) {
@@ -8,8 +7,8 @@ int main(int argc, char **argv) {
}
struct binary binary;
b_init(&binary);
- b_load_macho(&binary, argv[1], false);
- prange_t pr = rangeconv((range_t) {&binary, parse_hex_uint32(argv[2]), parse_hex_uint32(argv[3])});
+ b_load_macho(&binary, argv[1]);
+ prange_t pr = rangeconv((range_t) {&binary, parse_hex_uint32(argv[2]), parse_hex_uint32(argv[3])}, MUST_FIND);
write(1, pr.start, pr.size);
return 0;
}
View
@@ -1,7 +1,7 @@
#include <data/common.h>
#include <data/find.h>
-#include <data/binary.h>
-#include <data/link.h>
+#include <data/mach-o/binary.h>
+#include <data/mach-o/link.h>
#include "lambda.h"
extern unsigned char sandbox_o[];
@@ -118,7 +118,7 @@ void do_kernel(struct binary *binary, struct binary *sandbox) {
die("? %s", name);
})
b_relocate(sandbox, (void *) l.arg, (void *) l.func, 0);
- prange_t sandbox_pr = rangeconv(b_nth_segment(sandbox, 0));
+ prange_t sandbox_pr = rangeconv_off(sandbox->segments[0].file_range, MUST_FIND);
patch_with_range("sb_evaluate hook",
scratch,
sandbox_pr);
@@ -139,8 +139,8 @@ int main(int argc, char **argv) {
struct binary kernel, sandbox;
b_init(&kernel);
b_init(&sandbox);
- b_load_macho(&kernel, argv[1], false);
- b_prange_load_macho(&sandbox, (prange_t) {&sandbox_o, sandbox_o_len}, "sandbox.o");
+ b_load_macho(&kernel, argv[1]);
+ b_prange_load_macho(&sandbox, (prange_t) {&sandbox_o, sandbox_o_len}, 0, "sandbox.o");
patchfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);
if(patchfd == -1) {
View
39 nm.c
@@ -0,0 +1,39 @@
+#include <data/mach-o/binary.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static void usage() {
+ fprintf(stderr, "Usage: nm [-exp] binary [symbol]\n");
+ exit(1);
+}
+
+int main(int argc, char **argv) {
+ int flags = 0;
+
+ int c;
+ while((c = getopt(argc, argv, "ixp")) != -1) switch(c) {
+ case 'i': flags |= IMPORTED_SYM; break;
+ case 'x': flags |= TO_EXECUTE; break;
+ case 'p': flags |= PRIVATE_SYM; break;
+ default: usage();
+ }
+
+ if(!argv[optind] || (argv[optind + 1] && argv[optind + 2])) usage();
+
+ struct binary binary;
+ b_init(&binary);
+ b_load_macho(&binary, argv[optind]);
+
+ if(argv[optind + 1]) {
+ printf("%8x\n", b_sym(&binary, argv[optind + 1], flags));
+ } else {
+ struct data_sym *syms;
+ uint32_t nsyms;
+ b_copy_syms(&binary, &syms, &nsyms, flags);
+ while(nsyms--) {
+ printf("%8x %s\n", syms->address, syms->name);
+ syms++;
+ }
+ }
+ return 0;
+}

0 comments on commit 4f0405d

Please sign in to comment.