![]() |
eXeL@B —› Вопросы новичков —› Работа с аргументами функции в IDA |
Посл.ответ | Сообщение |
|
Создано: 06 марта 2017 21:33 · Личное сообщение · #1 Всем привет! Имееться функция ![]() Вопрос вот в чем, как В IDA работать с передаваемыми в функцию значениями? Я предполагаю, что для того чтобы получить доступ к буферу нужно проделать следующее: 1. достать из второго аргумента WSASend адрес структуры "WSABUF"; 2. по адресу структуры найти указатель на "buf"; Проблема в том, что я не могу понять как достать эти значения. Также не понятно что содержиться во всплывающем окошке при наведении курсора на аргумент, по идее там же должен быть адрес WSABUF, почему тогда напротив arg8 стоит знак '?'. ![]() |
|
Создано: 06 марта 2017 21:45 · Поправил: =TS= · Личное сообщение · #2 |
|
Создано: 06 марта 2017 21:56 · Поправил: Rew · Личное сообщение · #3 |
|
Создано: 06 марта 2017 22:07 · Поправил: DrVB_5_6 · Личное сообщение · #4 arg0 ...arg_30 - это аргументы функции. Их там явно больше 4, а точнее - 7, как и требуется. Прототип функции - кривой. Правда не совсем понятно, х64 по типам переменных (скорей всего, в том числе и разрядность аргументов), а функция Win32? Во всплывающем окошке всего-навсего типы данных из фрейма функции, в данном случае - аргументы. ![]() |
|
Создано: 06 марта 2017 23:26 · Поправил: Rew · Личное сообщение · #5 DrVB_5_6 Да, это приложение х64, а функция WSASend экспортируется из библиотеки WS2_32.dll. Могу предположить, что это просто историческое название библиотеки, а не деле она скомпилирована под х64. Если даже прототип неправильный, ведь это влияет только на отображение, верно? В дизассемблированом виде все же правильно. В данном случае, меня в первую очередь интересует как вытащить из второго аргумента(arg_8) адрес структуры на которую он указывает. Я не могу разобраться как узнать какие значения передала вызывающая функция, функции WSASend. ![]() |
|
Создано: 07 марта 2017 00:41 · Личное сообщение · #6 |
|
Создано: 07 марта 2017 01:37 · Личное сообщение · #7 |
|
Создано: 07 марта 2017 05:24 · Поправил: Rew · Личное сообщение · #8 DrVB_5_6,Jupiter Благодарю за ответы. Мне казалось что IDA понимает соглашения о вызове и предоставляет возможность быстро перейти к переданным значениям в памяти. Прототип WSASend выглядит таким образом: Code:
Судя по Структура WSABUF выглядит таким образом: Code:
Вот что происходит перед вызовом WSASend: ![]() И сразу после захода в функцию: ![]() Как я понимаю инструкция "lea rdx, [rsp+170h+var_120]", должна положить в RDX адрес [rsp+170h+var_120], верно? Тогда почему на момент захода в WSASend, в RDX лежит адрес со смещением в 8 байт от [rsp+170h+var_120]? Ладно, идем по текущему адресу в RDX: ![]() И тут вопрос, как интерпретировать эти значения, то есть, первые 8 байт от RDX получается - "u_long len", а следующие 8 - "char FAR *buf"? ![]() |
|
Создано: 07 марта 2017 20:27 · Личное сообщение · #9 что значит как интерпретировать ? а превратить эти значение в DQ 8 байтовый и посмотреть куда что указывает - кто мешает ? вообще прежде чем дебажить и разбирать не плохо для начала что называется "расчистить пространство" т.е. посмотреть и понять что вообще происходить намного впереди и намного дальше того места что изучаете я вот прямо так сразу даже зная о конверсии соглашения не могу назвать и знать что куда там у вас передалось, значит надо тупо с самого начала уже идти у вас на поводу ваших угадываний и уходить дальше в лес ? нет уж начните с того что бы отталкиваться от чего то 100% уверенностью, и идите дальше только по 100% уверенности а то вы начали с угадывания и дальше ушли в угадывание, но зато с кучей вопросов на который вряд ли кто то сможет что то сказать декомпилер под 64 вроде слили ? так нормально разберите этот сенд вызов определив где там что передается в каких регистрах на 100% а потом уже дальше изучайте ![]() |
|
Создано: 08 марта 2017 01:35 · Личное сообщение · #10 |
|
Создано: 08 марта 2017 02:01 · Личное сообщение · #11 call cs:offset, а ничего что сегментация урезана: Code:
Может быть и в остальном это косяки дизасма ? ----- vx ![]() |
|
Создано: 08 марта 2017 16:24 · Личное сообщение · #12 difexacaw пишет: Может быть и в остальном это косяки дизасма ? Это косяки компилятора, который данный код сотворил. difexacaw call cs:offset и call offset в х64 могут быть и различаются шестнадцатиричными значениями. Все претензии к Intel'у. А вообще-то надо знать матчасть!!! ![]() |
|
Создано: 08 марта 2017 17:11 · Личное сообщение · #13 |
|
Создано: 08 марта 2017 19:10 · Личное сообщение · #14 |
|
Создано: 08 марта 2017 20:32 · Личное сообщение · #15 |
|
Создано: 08 марта 2017 20:39 · Личное сообщение · #16 |
|
Создано: 08 марта 2017 20:49 · Личное сообщение · #17 |
|
Создано: 08 марта 2017 20:50 · Личное сообщение · #18 |
![]() |
eXeL@B —› Вопросы новичков —› Работа с аргументами функции в IDA |