Написал приложение для загрузки отладочных символов в Ida Pro 6.8. Через пень колоду но оно всё же работает. Но эта Ida Pro стоит у меня на планшете, приехав домой обнаружил что эта программа не куда не годится для использовании на основном компьютере, на нем стоит Ida Pro 7.0 и Spy++ вообще не видит не каких контролов на этом окне, выдает только дескриптор основного окна. Загрузил Иду в Иду и обнаружил что она написана на QT, в отладчике можно найти функции которые открывают файл на подобе GetOpenFileName, но ума не приложу как можно получить доступ к контролам, FindWindow и EnumChildWindow естественно не чего не видят. Пока единственный видимый путь это эмуляция кликов мыши, клавиатуры и clipboarda. Но может есть еще варианты?
CrawlUp, Штатный метод. Пилится либа и цепляется к апп. Как импорт или используется загрузчик из памяти. Но такое использовать для инструментов похоже на изврат. Может следует изучить получше интерфейсы той же иды, а не использовать методы малварки для решения тривиальных задач.
А вы и не получите доступ к контролам, потому, что их нет. Начиная с qt4 контролы рисуются и управляются самой qt. М.б, можно как-то через питонячий скрипт добиться того, чего хотите, используя ida sdk.
Попробывал последовать вашему совету, но скриптовый язык Ida Pro не дается не в какую, и больше всего бесит что нельзя использовать win api. Надо написать на языке idc получение путь к открытому файлу и поменять в нем расширение на .fas. Winapi функция GetModuleFileNameW, а вот аналога в языке idc я не нашел.
\idc\idc.idc Код (Text): /// Get input file name /// This function returns name of the file being disassembled string get_root_filename(); // only the file name string get_input_file_path(); // full path
хм, а я уже решил просто вставлять путь файл в скрипт в бинарном виде, этот вариант тоже пригодится если смогу поменять расширение полученного файла на языке idc.
Программу для автозагрузки отладочных символов fasma в Ida Pro7 создал. Не знаю есть ли смысл её выкладывать. Методы несколько топорные один из них нажатие в цикле клавиши ENTER, при загрузке скрипта Ida Pro (сам скриптовой язык так и не освоил, просто взял готовый скрипт с форума fasma) выдаеёт кучу warning если запускаешь мышкой то можно проставить галочки что-бы эти warningовые диалоговые окна не повторялись, а можно ли где нибудь в настройках Ida Pro отключить появление возможных варнингов раз и на всегда, независимо от перезапуска самой Ida Pro?
Не вижу никаких варнингов. Весь скрипт про парс .fas файла и установку имен через MakeNameEx(). Предположу, что иде не нравятся длинные имена, либо служебные префиксы типа loc_ или sub_.
А у меня этот скрипт толком и не работает. dwPosSymTbl это дворд по +18h в файле, это смещение на таблицу, первый дворд в каждой записи которой dwSymEA, который по логике скрипта должен быть EA, а там что угодно только не адреса. RVA может быть. Как оно у тебя работает?
Разобрался. Имена с EA там есть, просто глубоко спрятаны, но в иде 6.8 у меня скрипт их не проставляет. Зато варнингов тоже нет Код (Text): format pe console 4.0 include 'win32ax.inc' include 'macro\if.inc' entry main section '.code' code data readable executable proc main call somename ret endp proc somename ret endp Код (Text): main: 0x0000000000401000 flag?TE: 0x0000000000000000 loc?TJ: 0x0000000000000000 localbytes?TH: 0x0000000000000000 parmbytes?TG: 0x0000000000000000 main%: 0x0000000000000000 current?TI: 0x0000000000000000 somename: 0x0000000000401006 flag?TL: 0x0000000000000000 loc?TQ: 0x0000000000000000 localbytes?TO: 0x0000000000000000 parmbytes?TN: 0x0000000000000000 somename%: 0x0000000000000000 Код (Text): .code:00401000 public start .code:00401000 start proc near .code:00401000 call sub_401006 .code:00401005 retn .code:00401005 start endp .code:00401005 .code:00401006 .code:00401006 ; =============== S U B R O U T I N E ======================================= .code:00401006 .code:00401006 .code:00401006 sub_401006 proc near ; CODE XREF: startp .code:00401006 retn .code:00401006 sub_401006 endp Код (Text): load_fas: First segment: 401000-402000 load_fas: posSymTbl,sizeSymTbl,posSrcTbl,sizeSrcTbl: a13c-4ef60-5909c-4f86a9 load_fas: Symbol file ...\hello.fas has been loaded successfully.
Варнингов нет возможно потому, что в компилируемом файле обязательно должен быть код в конце программы Код (Text): data fixups end data иначе не все отладочные символы загрузятся. Ладно, выложу то что получилось, если основной скрипт удастся поправить то это можно будет сделать и в исходнике программы. Во первых программа расчитана на взаимодействие с Sumlime Text. При нажатии кнопок ctrl+F9 она читает заголовок текущего окна с путём файла ASM. Ctrl + F9 - это как вы поняли быстрые клавиши для запуска программы. Этот путь основа для всех дальнейших манипуляций. Вообщем окно не обязательно должно быть Sublime любое с кототорого GetWindowTextW получит адекватный путь. Еще IdaPro очень любит сохранять всякие файлы которые для корректной работы загрузки программа удаляет. На этом сайте вы можете узнать как прикрутить компилятор Fasm к sublime text. http://www.manhunter.ru/assembler/781_kak_podklyuchit_kompilyator_fasm_k_sublime_text.html Программа активно использует Terminate(выключение) Ida Pro так что будьте аккуратные с её запуском если у вас открыт какой нибудь важный проект в Ida Pro. Логика программы: 1. Чтение заголовка окна переднего плана. 2. Создание файла отладочных символов с помощью CMD 3. Проверка битности созданного файла. 4. Terminate(выключение) Ida Pro нужной битности. 5. Удаление файлов оствашихся от Ida Pro. 6. Запуск из консоли Ida Pro нужной битности с созданным скриптом . 7. Нажатие кнопок ENTER столько раз сколько вы установили в программе.(аккуратно с этой опцией) 8. Удаление скрипта загружающего отладочные символы. Вот короткое видео с работой программы. А да чуть не забыл, она должна работать от имени администратора иначе кнопка ENTER не жмётся, уж не знаю с чем это связано.
Это релоки. Зачем они тебе скажем в ехе? А варнинги написано же, already used in program. Собачьи метки ("@@:") надо автоматом переименовывать, либо не брать вообще, и локальные метки как локальные объявлять (SN_LOCAL).
А у меня только такой вариант и заработал, со стоковым смотри выше - тоже ничего. Удали все имена во вкладке Names и проверь.