Как выделить массив байтов, начиная с адреса 0 в IR LLVM? - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь написать инструментарий llvm, который создает теневую таблицу с низким объемом памяти (от 0x10000 в Linux, так как это минимальное значение), и мне интересно, каков канонический способ сделать это.Я посмотрел как на код DataFlowSanitizer, так и на код MemorySanitizer, но у меня возникли некоторые трудности с пониманием того, как система резервирует это пространство для специального использования и следит за тем, чтобы его не вытеснял alloca.

1 Ответ

2 голосов
/ 05 июля 2019

Если я правильно понимаю вопрос, то способ сделать это называется скрипт компоновщика .

Скрипт компоновщика указывает компоновщику, где и как найти данные в выходных данных.«Поместите данные только для чтения в 0x70000, глобальные переменные в режиме чтения-записи в 0x9000 и код в 0x42420000», и все в таком духе.Вы можете написать скрипт компоновщика для размещения глобальных переменных в 0x0, создать GlobalVariable, представляющий собой массив байтов, и переупорядочить список глобальных переменных, чтобы ваша GlobalVariable была первой в списке.

Это должно сработать ... насколько это возможнокак сказать, что правильные данные в 0x0 работают…

...