Предотвратить PIN_Backtrace () неудачный выход - PullRequest
0 голосов
/ 16 января 2020

У меня есть pintool, который звонит на PIN_Backtrace(). Кажется, что libunwind не поддерживает некоторые регистры в x86_64, и это приводит к следующему сообщению об ошибке и аварийному завершению:

libunwind: uint64_t libunwind::Registers_x86_64::getRegister(int) const Source/bionic/libunwind/src/Registers.hpp:342 - unsupported x86_64 register
Aborted

Я хочу, чтобы программа продолжала работать даже с этими ошибками. Какой самый эффективный способ справиться с этой ситуацией?

Я отладил свой pintool, используя gdb. Вот обратная трассировка, когда отладчик получает abort():

(gdb) bt
#0  0x00007ffff726c22b in ?? ()
#1  0x00007fffeca88730 in ?? ()
#2  0x00007ffff726c363 in ?? ()
#3  0x0000000000005386 in ?? ()
#4  0x0000000000000001 in ?? ()
#5  0x0000000000000000 in ?? ()

info proc mapping показывает диапазоны адресов следующим образом:

...
0x7fffeea3a000     0x7ffff71fb000  0x87c1000        0x0 
0x7ffff71fb000     0x7ffff7283000    0x88000        0x0 /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libc-dynamic.so
0x7ffff7283000     0x7ffff7284000     0x1000        0x0 
0x7ffff7284000     0x7ffff7286000     0x2000    0x88000 /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libc-dynamic.so
...

и

...
0x7fffe1687000     0x7fffec287000  0xac00000        0x0 
0x7fffec287000     0x7fffed28e000  0x1007000        0x0 
0x7fffed28e000     0x7fffedb6a000   0x8dc000        0x0 
...

Кажется, что библиотека libunwind, используемая Pin, является специальной, исключающей PinCRT. Это можно увидеть в выводе info /proc/<PID>/maps для pintool:

...
7ffff7e33000-7ffff7e45000 r-xp 00000000 08:13 466277                     /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libunwind-dynamic.so
7ffff7e45000-7ffff7e46000 r--p 00011000 08:13 466277                     /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libunwind-dynamic.so
7ffff7e46000-7ffff7e47000 rw-p 00012000 08:13 466277                     /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libunwind-dynamic.so
...
...