.got.pltがメモリにロードされませんでした。

.got.pltがメモリにロードされませんでした。

catAndroid(8)で実行されるaarch64プロセス()があります。私はこの部分に注目しました/proc/<PID/maps

746f308000-746f3de000 r-xp 00000000 103:00 5402    /system/lib64/libc++.so
746f3de000-746f3df000 ---p 00000000 00:00 0
746f3df000-746f3e7000 r--p 000d6000 103:00 5402    /system/lib64/libc++.so
746f3e7000-746f3e8000 rw-p 000d3000 103:00 5402    /system/lib64/libc++.so
746f3e8000-746f3eb000 rw-p 000de000 103:00 5402    [anon:.bss]
746f40e000- ... next file

これはプログラムヘッダーテーブルですlibc++.so

Type           Offset   VirtAddr           PhysAddr           FileSiz  MemSiz   Flg Align
PHDR           0x000040 0x0000000000009040 0x0000000000009040 0x0001c0 0x0001c0 R   0x8
LOAD           0x000000 0x0000000000009000 0x0000000000009000 0x0d58fc 0x0d58fc R E 0x1000
LOAD           0x0d68e0 0x00000000000e08e0 0x00000000000e08e0 0x007770 0x00aea8 RW  0x1000
DYNAMIC        0x0dbb40 0x00000000000e5b40 0x00000000000e5b40 0x000220 0x000220 RW  0x8
NOTE           0x000200 0x0000000000009200 0x0000000000009200 0x000038 0x000038 R   0x4
GNU_EH_FRAME   0x0d3058 0x00000000000dc058 0x00000000000dc058 0x0028a4 0x0028a4 R   0x4
GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW  0
GNU_RELRO      0x0d68e0 0x00000000000e08e0 0x00000000000e08e0 0x007720 0x007720 RW  0x10

セクションのタイトルは次のとおりです.got.plt

[Nr] Name        Type        Address          Off    Size   ES  Flg Lk  Inf Al
...
[22] .got.plt    PROGBITS    00000000000e6310 0dc310 001ce8 00  WA  0   0   8

ベースアドレスを追加したら、0xe6310セクションをにロードする必要があります0x746f3ee310。ただし、[anon:.bss]次のファイル間に対応します。

答え1

このマッピングは、仮想アドレスを定義する746f308000-746f3de000最初のセグメントに対応します。これを念頭に置いて、このセグメントと最初のセグメントとの間のアドレス差を最初に計算し、マップされたベースアドレスに追加する必要があります。これは、結果アドレスのオフセットを減算するのと同じです。これはマップの3番目のアドレスです。LOAD0x9000.got.plt0x90000x746f3ee3100x746f3e5310

関連情報