The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"найти вызов функции в coff объектнике, нужен совет"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"найти вызов функции в coff объектнике, нужен совет" 
Сообщение от карлсон Искать по авторуВ закладки(ok) on 09-Окт-05, 00:27  (MSK)
Задача такая: есть coff объектный файл, созданный стареньким gcc(версию не помню) для процессора microsparcii, нужно найти в коде вызов определенной функции и определить аргументы.

Что сделал: написал небольшую программку дампер и с помощью нее нашел в таблице строк, а потом и в таблице символов запись соответствующую имени нужной мне функции, после этого нашел в таблице релокации соотв. символу запись. Дальше я вытащил в отдельный файл секцию кода и открыл ее с помощью biew в режиме дизассемблера. Я так понимаю: вызов функции происходит в след. порядке, программа складывает в стэк параметры и после этого делает longjump на адрес функции. Попытался поискать в коде адрес, который был в релокационной записи но не нашел ...

Может я что-то не так делаю/предполагаю?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "найти вызов функции в coff объектнике, нужен совет" 
Сообщение от vnp emailИскать по авторуВ закладки(??) on 09-Окт-05, 01:33  (MSK)
>Задача такая: есть coff объектный файл, созданный стареньким gcc(версию не помню) для
>процессора microsparcii, нужно найти в коде вызов определенной функции и определить
>аргументы.
>
>Что сделал: написал небольшую программку дампер и с помощью нее нашел в
>таблице строк, а потом и в таблице символов запись соответствующую имени
>нужной мне функции, после этого нашел в таблице релокации соотв. символу
>запись. Дальше я вытащил в отдельный файл секцию кода и открыл
>ее с помощью biew в режиме дизассемблера. Я так понимаю: вызов
>функции происходит в след. порядке, программа складывает в стэк параметры и
>после этого делает longjump на адрес функции. Попытался поискать в коде
>адрес, который был в релокационной записи но не нашел ...
>
>Может я что-то не так делаю/предполагаю?

Не надо искать адрес. У вас уже есть релокационная запись с символом функции. Она прямо показывает место в коде, где функция используется. Это может быть инструкция вызова подпрограммы либо загрузки регистра. Во втором случае где-то еще в коде будет инструкция вызова, но уже с регистровым операндом. Так или иначе, параметры будут формироваться непосредственно перед вызовом. Имейте в виду, что некоторые (многие) аргументы окажутся в регистрах.
Ловушки:
1. релокационных записей может оказаться несколько, каждая описывает свою точку вызова
2. некоторые релокации могут быть section-relative, и символа функции не содержать.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "найти вызов функции в coff объектнике, нужен совет" 
Сообщение от карлсон Искать по авторуВ закладки(??) on 10-Окт-05, 00:00  (MSK)
>Не надо искать адрес. У вас уже есть релокационная запись с символом
>функции. Она прямо показывает место в коде, где функция используется.
Я все правильно понимаю, значение записанное в ячейке таблицы релокации это смещение от начала сегмента кода?

В моем случае символ неразрешенный(неслинкованный), поэтому я думал что значение, записанное в ячейке таблицы релокации - это мнимый адрес, по которому "лежит" код данной функции и который будет заменен на конкретное значение во время линковки, разве не так?

>Это
>может быть инструкция вызова подпрограммы либо загрузки регистра. Во втором случае
>где-то еще в коде будет инструкция вызова, но уже с регистровым
>операндом. Так или иначе, параметры будут формироваться непосредственно перед вызовом. Имейте
>в виду, что некоторые (многие) аргументы окажутся в регистрах.
>Ловушки:
>1. релокационных записей может оказаться несколько, каждая описывает свою точку вызова

В моем случае, к счастью, запись одна и находится достаточно легко.

>2. некоторые релокации могут быть section-relative, и символа функции не содержать.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "найти вызов функции в coff объектнике, нужен совет" 
Сообщение от карлсон Искать по авторуВ закладки(??) on 10-Окт-05, 20:30  (MSK)
Вобщем нашел, все именно так и оказалось, как вы говорили. Спасибо.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "найти вызов функции в coff объектнике, нужен совет" 
Сообщение от klalafuda Искать по авторуВ закладки on 10-Окт-05, 10:48  (MSK)
>Задача такая: есть coff объектный файл, созданный стареньким gcc(версию не помню) для
>процессора microsparcii, нужно найти в коде вызов определенной функции и определить
>аргументы.
>
>Что сделал: написал небольшую программку дампер и с помощью нее нашел в
>таблице строк, а потом и в таблице символов запись соответствующую имени
>нужной мне функции, после этого нашел в таблице релокации соотв. символу
>запись. Дальше я вытащил в отдельный файл секцию кода и открыл
>ее с помощью biew в режиме дизассемблера. Я так понимаю: вызов
>функции происходит в след. порядке, программа складывает в стэк параметры и
>после этого делает longjump на адрес функции. Попытался поискать в коде
>адрес, который был в релокационной записи но не нашел ...
>
>Может я что-то не так делаю/предполагаю?

как минимум - почитать info по objdump из binutils :) дальше уже дело техники.

// wbr

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "найти вызов функции в coff объектнике, нужен совет" 
Сообщение от карлсон Искать по авторуВ закладки(??) on 10-Окт-05, 20:28  (MSK)
Да objdump сильно упростил дело, спасибо.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру