Доброго времени суток.
Никак не могу понять, как мне получить исходят из смещения, которое находится в .plt имя функции. Т.е., например, иммею след. код:
someFunc - это функция из сторонней либы динамечески прилинкованной.Code:.text:0005D42C MOV R0, #0xBD0 ; cap .text:0005D430 BL someFunc ;0x4fa54 .text:0005D434 LDR R3, [R11,#var_20]
Что я делал, перешл по этому смещению, что указан в команде BL. Это смещение оказалось из секции .plt и я так понял на прямую я не могу вытянуть имя функции, значит должен быть какой-то другой подход.
Пошел смотреть секцию .rel.plt, нашел там свою функцию:
Смещение 00153d7c - находится уже в секции .got, посмотрел, что находися по этому смещению. Получил 0004f680 - это смещение начала секции .plt. По этому смещению находится код:Code:00153d7c 0002b616 R_ARM_JUMP_SLOT 00000000 someFunc
И я так понял вот отсюда мы получаем интересующий меня адрес 0x4fa54, только я не пойму как... Ведь получается, что в РС всегда один и тот же адрес... И когда я вызываю какую-то другую функцию из динамически прилинкованой библиотеки, так адрес вроде как не поменяется...Code:.plt:0004F680 STR LR, [SP,#-4]! .plt:0004F684 LDR LR, =_GLOBAL_OFFSET_TABLE_ ; PIC mode .plt:0004F688 NOP .plt:0004F68C LDR PC, [LR,#8]!
Вообще вопрос, собсвтенном. в том как из смещения (0x4fa54), которое н аходится в .plt получить, что за имя функции. А то что-то я вообще запутался в этом формате Elf, хотя бы б картинке где-то нормальные сделали бы, что ли....



Reply With Quote
Thanks