Еще одна опция, чтобы определить, генерируется ли ваша программа с параметром -fPIC:
при условии, что в вашем коде включена опция -g3 -gdwarf-2 при компиляции.
другой формат отладки gcc может также содержать информацию макроса:
Обратите внимание, что следующий синтаксис $ '..' предполагает bash
echo $' main() { printf("%d\\n", \n#ifdef __PIC__\n__PIC__\n#else\n0\n#endif\n); }' | gcc -fPIC -g3
-gdwarf-2 -o test -x c -
readelf --debug-dump=macro ./test | grep __PIC__
такой метод работает, потому что руководство gcc объявляет, что если используется -fpic, PIC определяется как 1, и
если используется -fPIC, PIC равно 2.
Ответы выше, проверив GOT, являются лучшим способом. Потому что предварительный запрос -g3 -gdwarf-2, я думаю, используется редко.