У меня есть объектный файл (для которого у меня нет доступа к источнику).
По уважительным причинам мне нужно продублировать путь вызова.Например, этот объектный файл может иметь следующие символы:
_FuncA
_FuncB
_FuncC
_FuncA
вызывает _FuncB
, что в свою очередь вызывает _FuncC
.FuncC
может увеличивать глобальную переменную, определенную в исходном коде C counter
.
Я хочу изменить этот объектный файл и дублировать _FuncA
, _FuncB
и _FuncC
.
Результатом будет объектный файл со следующими символами:
_FuncA
_FuncB
_FuncC
_FuncA_copy
_FuncB_copy
_FuncC_copy
_FuncA_copy
потребуется вызвать _FuncB_copy
, что в свою очередь вызывает _FuncC_copy
.И мне нужно _FuncC_copy
, чтобы по-прежнему ссылаться на такую же глобальную переменную counter
и увеличивать ее.
Что у меня есть:
Кажется, что команда objcopy
позволит вам добавлять новые символы, используя флаг --add-symbol <name>=[<section>:]<value>[,<flags>]
.
Похоже, это поможет мне создать _FuncA_copy
, _FuncB_copy
, _FuncC_copy
.Но есть ли способ изменить вызов функции внутри _FuncA_copy
на _FuncB
, чтобы перейти на _FuncB_copy
вместо этого?
Есть ли лучший способ сделать это?