![]() |
eXeL@B —› Вопросы новичков —› Найти запись в локальную переменную... |
Посл.ответ | Сообщение |
|
Создано: 28 октября 2011 20:29 · Личное сообщение · #1 работаю в IDA и есть код: Code:
для начало интересует что сюда передается: Code:
только без всяких отладчиков... не обходимо найти что сюда записывается: lvar_238 жму X везде выдает только на чтение... Есть тут люди более менее понимаемые? ![]() |
|
Создано: 28 октября 2011 20:40 · Личное сообщение · #2 ну дык ето адрес (видимо) передается и Weapons_shots_ уже туда пишет (или не пишет) - глядите сами ![]() |
|
Создано: 28 октября 2011 20:42 · Личное сообщение · #3 |
|
Создано: 28 октября 2011 20:47 · Поправил: digger70 · Личное сообщение · #4 |
|
Создано: 28 октября 2011 21:01 · Личное сообщение · #5 |
|
Создано: 28 октября 2011 21:03 · Личное сообщение · #6 |
|
Создано: 28 октября 2011 21:03 · Личное сообщение · #7 |
|
Создано: 28 октября 2011 21:07 · Личное сообщение · #8 |
|
Создано: 28 октября 2011 21:09 · Личное сообщение · #9 |
|
Создано: 28 октября 2011 21:32 · Поправил: OKOB · Личное сообщение · #10 первые 4 параметра передаются по значению, последние 2 по ссылке (указателю). Через ECX обычно передается адрес объекта класса для которого вызывается метод. _camera->Weapons_shots_(range, var_290, var_28C, var_288, &var_238, &var_22C) sendersu пишет: и Weapons_shots_ уже туда пишет ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 28 октября 2011 22:03 · Личное сообщение · #11 |
|
Создано: 28 октября 2011 22:26 · Личное сообщение · #12 |
|
Создано: 28 октября 2011 23:00 · Личное сообщение · #13 |
|
Создано: 28 октября 2011 23:02 · Личное сообщение · #14 |
|
Создано: 28 октября 2011 23:25 · Личное сообщение · #15 |
|
Создано: 29 октября 2011 00:01 · Личное сообщение · #16 |
|
Создано: 29 октября 2011 01:28 · Личное сообщение · #17 |
|
Создано: 30 октября 2011 13:44 · Личное сообщение · #18 VintProg А чего выяснять. Решение первое и нормальное - применить отладчик. Решение второе: при вызове Weapons_shots передается ссылка, т.е. адрес lvar_238 Соответственно в самой Weapons_shots в ИДА вы уже не увидете обращений к lvar_238 и придется отслеживать 4-й параметр. Аналогично может произойти и в других подпрограммах. Т.ч. долго еще искать и искать вам ответ самому, раз отладчик низзя... Разжевывать никто не будет, хоть это и для новичков. Уже все разжевали, а я только сегодня добрый ![]() ![]() |
|
Создано: 30 октября 2011 16:26 · Поправил: Hexxx · Личное сообщение · #19 tundra37 пишет: Решение первое и нормальное - применить отладчик Ерунда. var_238 - это стековая переменная, а это: Code:
загрузка указателя на начало этой переменной. Переменная может оказаться, как простого типа (int, short, char), так и структурой или массивом, или даже классом в стеке. Если ниже по коду, после Weapons_shots_, обращений именно к var_22C, значит это сложный тип. Ида физически не может прохавать код вида: Code:
Она напишет, что buffer - это одна переменная, а buffer[12] - другая. Для нее и то и другое - стек, она не знает что эти два куска стека - части одной переменной. Поэтому, нужно выяснить какого размера эта переменная, и объяснить иде. А выяснить это можно только анализом того как код MyFunc() обращается с передаваемым буфером. Дальше, когда известен размер, нужно создать правильную стековую переменную buffer, правильного размера. Тогда IDA начнет показывать var_22C+XX в том месте где обращаются к содержимому. Ну и дальше уже предстоит разбираться что там по этому смещению XX, какое-то поле структуры/класса или просто смещение в массиве. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 30 октября 2011 17:47 · Поправил: VintProg · Личное сообщение · #20 |
|
Создано: 31 октября 2011 13:28 · Личное сообщение · #21 |
![]() |
eXeL@B —› Вопросы новичков —› Найти запись в локальную переменную... |