- // parse_headers has set pos to .text
- ret = fwrite(d_obj, 1, sztext_obj, f_obj);
- my_assert(ret, sztext_obj);
+ // patch .text
+ ret = fseek(f_obj, s_text_obj.sect_fofs, SEEK_SET);
+ my_assert(ret, 0);
+ ret = fwrite(s_text_obj.data, 1, s_text_obj.size, f_obj);
+ my_assert(ret, s_text_obj.size);
+
+ // patch relocs
+ ret = fseek(f_obj, s_text_obj.reloc_fofs, SEEK_SET);
+ my_assert(ret, 0);
+ ret = fwrite(s_text_obj.relocs, sizeof(s_text_obj.relocs[0]),
+ s_text_obj.reloc_cnt, f_obj);
+ my_assert(ret, s_text_obj.reloc_cnt);
+
+ ret = fseek(f_obj, s_text_obj.scnhdr_fofs, SEEK_SET);
+ my_assert(ret, 0);
+ ret = fread(&tmphdr, 1, sizeof(tmphdr), f_obj);
+ my_assert(ret, sizeof(tmphdr));
+
+ tmphdr.s_nreloc = s_text_obj.reloc_cnt;
+
+ ret = fseek(f_obj, s_text_obj.scnhdr_fofs, SEEK_SET);
+ my_assert(ret, 0);
+ ret = fwrite(&tmphdr, 1, sizeof(tmphdr), f_obj);
+ my_assert(ret, sizeof(tmphdr));