Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! ![]() Добро пожаловать на геройский форум! ![]() |
Re: База данных IDA от void17Ну не игнорирует же компилятор соглашения. MinGW - это же не поделка какая-то, хорошая репутация у компилятора есть. Заменил __fastcall на неправильный в данном случае __thiscall и окошко уже поехало (строку взяли из ecx, __fastcall следующий аргумент из edx взял, а __thiscall - сразу из стека, поэтому окно и не по центру оказалось), так что работают соглашения.
|
Re: База данных IDA от void17Отлично, значит я спокойно могу использовать адекватный компилятор(GCC) и code::blocks
![]() GCC на голову выше MSVC, к тому же здесь грамотно реализована libc. А установка пакетов с MSYS2+Pacman это буквально пара кликов. ![]() Надо будет это все в helpme описать |
Re: База данных IDA от void17Такой вопрос. Ниже приведён фрагмент декомпилированного кода, где this - это searchArray*, cell - searchPoint cell[72][72], sizeof(searchPoint) == 9.
После элементарных преобразований получаем:
Известны ли способы заставить IDA понимать, что 64 * X + 8 * X = 72 * X? Не первый раз такое встречаю и ничего поделать не могу. Ведь нечитабельно. Понятное дело, что такой ассемблер, и два умножения посчитаны отдельно, но может быть, можно как-то подсказать IDA, что мы имеем дело с индексами двумерного массива? Или вот пример попроще, но суть та же:
Путь - это массив searchPoint path[1024]; Как строку выше преобразовать в то, чем она является?
|
Re: База данных IDA от void17Ну это нечитаемо конечно, но понять-то можно что происходит. Я ничего не могу с этим сделать, к сожалению.
Последний раз редактировалось void_17 13 авг 2023, 14:17, всего редактировалось 1 раз.
|
Re: База данных IDA от void17Это Герои 1. Неужели нет способа подсказать IDA, что 8 + 1 = 9? Тогда, я думаю, и индексы бы подхватились. А сейчас она не понимает, что 8 + 1 - это размер.
|
Re: База данных IDA от void17Нет, нету. Декомпилят это именно что плагин с закрытым кодом, можно посмотреть для него дополнительные плагины и вкурить этот безумный SDK.
Есть еще плагины IDA Ghidra Decompiler, retdec decompiler for IDA. |
Re: База данных IDA от void17С IDAвским декомпилятором можно попробовать поменять тип переменной(клавиша Y) в декомпляте на тот же самый и иногда это срабатывает. Либо поменять на void* или на int*, вообщем поиграться с типами, магическим образом все начинает нормально отображаться. Еще это зависит от версии IDA, я использую только 7.7... Вообщем это плохо когда имеем дело с проприетарным ПО, нельзя просто пофиксить баг.
![]() |
Re: База данных IDA от void17Вот из-за такого ассемблера IDA путается:
Первая строчка: edx = ebp + eax * 8. Подставляем во вторую: eax = eax + edx + 20 = eax + (ebp + eax * 8) + 20 = ebp + 8 * eax + eax + 20. И вот эту сумму она в 9 * eax никак не хочет преобразовывать. |
Re: База данных IDA от void17Если что я вернулся к API. По-тихоньку учусь писать плагины для IDA. Хочу автоматизировать написание API, это будет круто.
Сейчас надо сделать настраиваемый дамп информации о типах в базе данных. (По аналогии с Create C Header File.. но лучше) Пока что сделал чтобы выводил список всех типов БД в output window, потом допилю и возможно прикручу GUI-шку и запилю свои плагины на гитхаб. ![]() |
Re: База данных IDA от void17Появился такой вопрос. В С++98 же не было __int64? И long long, как я почитал, не было (если верить). Писались ли Герои с каким-то расширением языка? В дампе T_QUAD(013) просто, и это 64 бита.
|
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2