<< 51/64 >>
First Last

何が問題かというと

 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 相対じゃ届かない距離になることが結構ある