自作OS
gcc -c -O0 -fPIE -m32 -mgeneral-regs-only プログラム名.c
objcopy --only-section=.text --output-target binary プログラム名.o filebin
これでRAWバイナリにして実行しています。
gccのコンパイル時に-fpieオプションを付ければ"位置独立コード"を生成できるようです。
どこのアドレスから展開しても問題なく動かせるってことですね
では、・・・
sample_function(){} main(){ int * p = 0x00000000; void (*func_p)() = sample_function; //32bit環境を想定 int dummy = func_p; *p = dummy; }
(コード正しいかわからないけど・・・)
メモリアドレス0x00000000にsample_function関数のアドレスを格納するプログラムです。
で、質問なのですが
どこのアドレスにマップされた場合でも
0x0000000に正しくsample_function関数のアドレスが格納されるのでしょうか?
仮に正しく格納されないとして
正しく格納させる方法とかはないでしょうか?
質問内容おかしかったらすみません
わからないのでお願いします。
![guest](/img/icon/icnUserSample.jpg)