Описание тега position-independent-code

1 ответ

В чем разница между кодом PIC и `ld -r`?

Я знаю, что оба они используются для создания кода, который можно разместить в разных местах, но как каждый из них работает и почему?
23 ноя '16 в 14:44
1 ответ

Ссылка на определенные линкером символы в позиционно-независимом коде

У меня есть модуль кода, скомпилированный для ARM с -fpie, и я хотел бы очистить BSS при первом его запуске. Однако, когда я ссылаюсь на символы сценария компоновщика для начала и конца раздела BSS, я получаю код, который содержит абсолютные адреса …
21 мар '17 в 16:49
2 ответа

Исправлено перемещение глобальных переменных в независимые от позиции исполняемые файлы с GCC

Я ищу gcc флаг командной строки или другие параметры для создания GOTOFF переезды, а не GOT перемещения для моего статически связанного, независимого от позиции исполняемого файла i386. Подробнее о том, что я пробовал, ниже. Мой исходный файл g1.s в…
16 дек '17 в 14:26
1 ответ

Как настроить gcc на использование -no-pie по умолчанию?

Я хочу скомпилировать следующую программу для Linux: .global _start .text _start: mov $1, %rax mov $1, %rdi mov $msg, %rsi mov $13, %rdx syscall mov $60, %rax xor %rdi, %rdi syscall msg: .ascii "Hello World!\n" Тем не менее, это дает мне следующую о…
1 ответ

ООО: неподдерживаемое перемещение по символу

проблема llc дает мне следующую ошибку: ОШИБКА LLVM: неподдерживаемое перемещение по символу Подробная компиляция Я реализую интерфейс LLVM для IR среднего уровня (MIR) компилятора, и после того, как я конвертирую различные методы во множество файло…
1 ответ

Почему "символ @GOT" не разрешен в двоичном виде?

Вот пример файла сборки, test.s .global main main: mov __progname@GOT, %eax // failed to compile mov __progname@GOT(%ebx), %eax //succeed to compile Я попытался скомпилировать его с -pie флаг, но не удалось. $ gcc -pie -o test test.s osboxes@osboxes…
1 ответ

Как разделяемая библиотека находит раздел GOT?

Пока я читал http://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/ пришел вопрос: Как разделяемая библиотека PIC после загрузки где-нибудь в виртуальном адресном пространстве процесса знает, как ссылаться на внеш…
1 ответ

Адрес точки входа программы PIE

Как узнать фактический адрес точки входа программы PIE в Linux/Android? Я могу прочитать адрес точки входа, используя readelf -l, но для эльфа, скомпилированного и связанного с -pie или же -fPIE, фактический адрес точки входа будет отличаться от нег…
16 мар '18 в 21:52
1 ответ

Почему я не могу скомпилировать с -fPIE, но могу с -fPIC?

У меня есть одна интересная проблема компиляции. Сначала посмотрите код для компиляции. $ ls Makefile main.c sub.c sub.h $ gcc -v ... gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ## Makefile %.o: CFLAGS+=-fPIE #[2] main.so: main.o sub.o $(CC)…
07 дек '17 в 12:40
1 ответ

Почему программа, скомпилированная с -fpic и -pie, имеет таблицу перемещения?

Если тривиальная программа компилируется с помощью следующей команды: arm-none-eabi-gcc -shared -fpic -pie --specs=nosys.specs simple.c -o simple.exe и записи о перемещении печатаются с помощью команды: arm-none-eabi-readelf simple.exe -r Есть куча …
12 май '16 в 22:24
0 ответов

Почему код PIC реализован для разыменования дважды, а не один раз?

Из Позиционно-независимого кода (PIC) в разделяемых библиотеках я узнал, что при вызове кода PIC в linux сначала вызывается функция plt, а затем она вызывает (tail call) фактическую функцию. При первом вызове функции будет загружена функция. Вопрос …
04 май '18 в 12:13
1 ответ

Проблемы со сборкой модульных тестов тензорного потока

Мне нужно запустить тесты на некоторых проходах XLA и использовать bazel test --config=opt --config=cuda //tensorflow/compiler/xla/service сделать то же самое ( отсюда). Сбой сборки со следующим сообщением, намекающим на отсутствующую зависимость Go…
1 ответ

Как компилятор выбрать, какую функцию "get_pc_thunk", чтобы получить текущий адрес?

Пирог двоичный использовать функцию __x86.get_pc_thunk получить адрес, динамически определенный во время загрузки. я) Иногда это вызывает __x86.get_pc_thunk.ax, 5ff: e8 24 00 00 00 call 628 <__x86.get_pc_thunk.ax> 604: 05 fc 19 00 00 add $0x19…
1 ответ

Почему я не могу получить доступ к массиву с регистром в качестве смещения?

Я делаю некоторый ассемблерный код (intel), и я не понимаю, почему этот код не работает, когда я пытаюсь создать общую библиотеку: BITS 64 SECTION .text GLOBAL test test: push rbp mov rbp, rsp mov rax, 3 mov al, BYTE [rel array + rax] pop rbp ret SE…
1 ответ

Влияет ли ASLR на файл карт?

Влияет ли ASLR на файл карт? AFAIK Виртуальный адрес по умолчанию для текстового сегмента - 0x400000 для 64-разрядных двоичных файлов, но при анализе файла /proc/pid/maps я обнаружил, что ОС явно использует случайные адреса для сегментов текста и да…
24 июл '18 в 20:19
2 ответа

objdump дает одинаковый вывод для объектных файлов, созданных с использованием -fPIC и без него

У меня есть два файла, ах и a.cpp: // a.h extern "C" void a(); // a.cpp #include "a.h" #include <stdio.h> void a() { printf("a\n"); } Я скомпилировал это как с, так и без -fPIC, а потом objdumpЭд оба. Странно, я получил одинаковый вывод для об…
01 апр '18 в 19:35
1 ответ

Связать символы с абсолютным адресом в двоичном формате PIC

Я создаю новое изображение, которое состоит из нескольких двоичных изображений (соединенных вместе через скрипт Python). Проблема в том, что последнее двоичное изображение должно быть скомпилировано с помощью fPIC, а предыдущие изображения - нет. По…
0 ответов

Как понять разницу между ПОС и без ПОС?

Я пытаюсь понять разницу между PIC (позиционно-независимым кодом) и отсутствием PIC-кода. Тестовый код здесь. #include <stdio.h> int global; int f() { return global; } Моя ОС - Ubuntu. $ uname Linux Скомпилированный код сборки следующий. Я не …
2 ответа

Смешивание объектных модулей fPIC и не-fPIC

Окружающая среда: Ubuntu 16.04 В моем эксперименте я выполнил следующие команды: gcc -c 1.c gcc -c -fPIC 2.c gcc -shared 1.o 2.o -o libmyxxx.so Все функции, которые мне нужны, определены в 2.c через extern "C" деклараций. Эти функции внутренне вызыв…
2 ответа

Как заставить gcc вызывать функцию непосредственно в коде PIC?

Рассмотрим следующую функцию: extern void test1(void); extern void test2(void) { test1(); } Это код, который генерирует GCC без -fpic на amd64 Linux: test2: jmp test1 Когда я собираю с -fpic gcc явно вызывает через PLT, чтобы включить взаимное распо…
01 апр '16 в 10:41