{
static const uint8_t p7[7] = { 0x8d, 0xa4, 0x24, 0x00, 0x00, 0x00, 0x00 };
static const uint8_t p6[6] = { 0x8d, 0x9b, 0x00, 0x00, 0x00, 0x00 };
- static const uint8_t p5[5] = { 0x05, 0x00, 0x00, 0x00, 0x00 };
- static const uint8_t p4[4] = { 0x8d, 0x64, 0x24, 0x00 };
- static const uint8_t p3[3] = { 0x8d, 0x49, 0x00 };
- static const uint8_t p2[2] = { 0x8b, 0xff };
- static const uint8_t p1[1] = { 0x90 };
+ static const uint8_t p5[5] = { 0x05, 0x00, 0x00, 0x00, 0x00 }; // add eax, 0
+ static const uint8_t p4[4] = { 0x8d, 0x64, 0x24, 0x00 }; // lea
+ static const uint8_t p3[3] = { 0x8d, 0x49, 0x00 }; // lea ecx, [ecx]
+ static const uint8_t p2[2] = { 0x8b, 0xff }; // mov edi, edi
+ static const uint8_t p1[1] = { 0x90 }; // nop
int len;
int i;
int main(int argc, char *argv[])
{
- unsigned int base = 0, addr, addr2, end, sym, *t;
+ unsigned int base = 0, addr, end, sym, *t;
struct my_sect_info s_text_obj, s_text_exe;
struct my_symtab *raw_syms_obj = NULL;
struct my_symtab *syms_obj = NULL;
f_obj = fopen(argv[1], "r+b");
if (f_obj == NULL) {
- fprintf(stderr, "%s", argv[1]);
+ fprintf(stderr, "%s: ", argv[1]);
perror("");
return 1;
}
f_exe = fopen(argv[2], "r");
if (f_exe == NULL) {
- fprintf(stderr, "%s", argv[2]);
+ fprintf(stderr, "%s: ", argv[2]);
perror("");
return 1;
}
i--;
s_text_obj.reloc_cnt--;
}
+#if 0
// note: branches/calls already linked,
// so only useful for dd refs
+ // XXX: rm'd because of switch tables
else if (raw_syms_obj[sym].is_text) {
- addr2 = raw_syms_obj[sym].addr;
+ unsigned int addr2 = raw_syms_obj[sym].addr;
if (s_text_obj.data[addr2] == 0xcc) {
printf("warning: reloc %08x -> %08x "
"points to rm'd target '%s'\n",
raw_syms_obj[sym].name);
}
}
+#endif
}
// patch .text