Получить результат выполнения C функции из исполняемого файла, у которого отсутствуют необходимые зависимости

У меня есть LSB pie executable файл. Согласно этой статье у меня получается вызывать функцию, название которой я знаю.

import lief
import ctypes

app = lief.parse("./executable")
addr = app.get_function_address("getInfo")
print(addr)
app.add_exported_function(addr, "getInfo")
app[lief.ELF.DYNAMIC_TAGS.FLAGS_1].remove(lief.ELF.DYNAMIC_FLAGS_1.PIE)
app.write("./temp.so")

tempLib = ctypes.CDLL("./temp.so")
tempLib.getInfo.restype = ctypes.c_char_p
print(tempLib.getInfo())

С этим проблем нет, все работает. Однако, если у executable есть отсутствующие зависимости, мы не сможем выполнить

tempLib = ctypes.CDLL("./temp.so")

Собственно в этом и вопрос. Возможно ли как-то выполнить и получить результат функции, определенной в executable и адресс которой мы знаем, несмотря на отсутствующие зависимости? Либо, возможно ли скопировать ее в другой исполняемый/разделяемый файл, где уже не будет проблем ее выполнить? Разумеется, сама функция не использует никакие объекты, а только возвращает значение макроса, определяемого при сборке. Примерно:

extern "C" const char* getInfo() { return INFO; }

Заранее извиняюсь, если эти вопросы откровенно глупые. В теме слаб.


Ответы (0 шт):