ディバイスドライバをハックしよう!at LINUXディバイスドライバをハックしよう! - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト23:login:Penguin 02/02/01 08:36 hfC7cfcj >>20 リロケートってのは、一般的にいって、コンパイル/アセンブル したときとりあえず付けておいたてきとーなアドレスを、 実行時の環境にあわせて番号付け直すこと。 たとえば、オレサマ言語で function hoge print "逝ってヨシ" end function fuge print "オマエモナー" end function 2ch call hoge call fuge ってプログラムがあるとする。コンパイルすると、たとえば 0x000 jump 0x300 jump 0x400 return 0x100 "逝ってヨシ" 0x200 "オマエモナー" 0x300 print 0x100 return 0x400 print 0x200 retun みたいな感じになる。0x000から始まるのは、とりあえず そうしているだけであって、これをリンク(か、動的ロードか) しようとすると他の部分と競合してしまって、まずい。 で、ロードすると、linkerがいまのメモリ状態に合わせて、 たとえば空きメモリが0x400000から始まってたとすると 0x400000 jump 0x400300 jump 0x400400 return 0x400100 "逝ってヨシ" 0x400200 "オマエモナー" 0x400300 print 0x400100 return 0x400400 print 0x400200 retun って内容に書き換えてから、メモリ上に置く。 で、0x400000にジャンプすることで、始めて 関数2chが使えるようになる、ってこった。 基本的には、動的にロードする場合でも、静的に リンクする場合でも、どこかしらで似たようなことを やってくれてる。 (で、そういうリロケートとかの方式の一つがELFバイナリで あったり、a.out形式バイナリであったりするわけだ。) ここいらの話は、Loader Linker とかいう本にかいてあるよ。 (ちょっと書名自信なし) 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch