code = malloc(0x1000); data = malloc(0x1000); /* output compiled results into code and data... */ '''relocate(code);''' relocate(data); get_main_from_code(code)(argc, argv);
この code というやつは当然のことながら、 data 内への参照をたくさん持っている
で、その参照は 32bit 相対参照
.o を作ってしまえば普通 .code と .data は十分近いので 32bit 相対でいいけど、適当に malloc してきたバッファは互いに 32bit 相対じゃ届かない距離になることが結構ある