Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Обсуждение статей —› [ northdemon ] Разработка трассировочного плагина для IDA
<< . 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 536.4 (!), 171thx
Активность: 0.660.13
Статус: Администратор
Создатель CRACKL@B

Создано: 22 ноября 2010 00:12
· Личное сообщение · #1

Обсуждение статьи Разработка трассировочного плагина для IDA

-----
Всем не угодишь




Ранг: -26.7 (нарушитель), 7thx
Активность: 0.060.08
Статус: Участник

Создано: 31 марта 2019 00:15
· Личное сообщение · #2

Студию, действительно, необязательно брать самую последнию. У меня лично стоят 2010 и 2015, но если уж дело принципа, то и 2017 поставить не проблема.


Проект на гитхабе - это, конечно, хорошо, но для обучения может все же лучше это оформить в виде треда и статьи в формате PDF? Сделать что-то похожее на то, что делает Яшечка. Ну и паралельно проект на гитхаб, конечно же, делу не помешает.


Еще очень большим подспорьем было бы - если б к данному делу подключился в качестве помошника-консультанта plutos. Знаю точно - он занимался (а может и до сих пор занимается) подобной проблемой. Он упоминал об этом в нескольких постах. Уверен, что если бы кто-нибудь, отличный от меня, попросил бы его о помощи - он бы не отказал.



Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 31 марта 2019 08:53 · Поправил: DrVB_5_6
· Личное сообщение · #3

e_sergey пишет:
Что будет делать - решим или решите...
Цель - научиться кодить такие плагины
И использовать их для своих задач ...

Да большинство последних плагинов на Питоне пишутся!
И что тут умничать или меряться! В крайнем случае, посмотрите, для какой версии студии сделаны примеры в SDK у Ильфака, на той и делайте!
А на Питоне и писанины поменьше (меньше буков, чем в С++) да и менять попроще, студия нафиг не нужна!
Но, похоже, до дела-то, никогда и не дойдёт. Тут два клоуна, сбежав из цирка, померяться решили.
В других темах-то их повычеркивали.
sty пишет:
может все же лучше это оформить в виде треда и статьи в формате PDF?

Лучше хотя бы "Hello World" для начала изобразить.

| Сообщение посчитали полезным: dosprog, plutos


Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 31 марта 2019 08:58 · Поправил: f13nd
· Личное сообщение · #4

Писать что-то самому, для своих задач - редкое и правильное стремление. Если нужно делать что-то по требованию, а не по событию - советую питоноскриптами ограничиваться, возни с ними меньше, делать удобней, для корректировки перезапуск иды не нужен. В них возможно и кнопку забиндить на выполнение скрипта и даже графические какие-нибудь приблуды сооружать. Ну или да, питоноплагины тоже в удобстве превосходят цэ.
ЗЫ: я тоже не выложил ни строчки на гитхабе, я жалкое ничтожество

-----
2 оттенка серого


| Сообщение посчитали полезным: morgot


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 31 марта 2019 09:51 · Поправил: plutos
· Личное сообщение · #5

DrVB_5_6 пишет:
похоже, до дела-то, никогда и не дойдёт

sty пишет:
если б к данному делу подключился в качестве помошника-консультанта plutos


конечно не дойдет, кто ж сомневается, пока меня не подключите в качестве помощника.
я ведь на этих, блин, плугинах-питонах, уже шестые вставные зубы съел.

А если серьезно, то грустно все это: Злоба, взаимное раздражение, оскорбления, пустая трата времени и сил.
Net result => ZERO

-----
Give me a HANDLE and I will move the Earth.




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 31 марта 2019 10:29 · Поправил: e_sergey
· Личное сообщение · #6

Всем привет

вот здесь --> Link <-- архив со справкой , если кому интересно , там же картинки

а код пока получился следующий

Code:
  1. #include <ida.hpp>
  2.  
  3. #include <idp.hpp>
  4.  
  5. #include <loader.hpp>
  6.  
  7.  
  8.  
  9. char IDAP_name[] = "Blablabla";
  10.  
  11. char IDAP_comment[] = "Blablabla";
  12.  
  13. char IDAP_help[] = "Blablabla";
  14.  
  15. char IDAP_hotkey[] = "Ctrl-Alt-D";
  16.  
  17.  
  18.  
  19. int IDAP_init(void)
  20.  
  21. {
  22.  
  23.  // Выполните здесь проверки, чтобы убедиться, что ваш плагин используется внутри
  24.  
  25.  // среды, для которой он был написан. Верните PLUGIN_SKIP, если
  26.  
  27.  // проверки не пройдены, в противном случае возвращаем PLUGIN_KEEP.
  28.  
  29.  return PLUGIN_KEEP;
  30.  
  31. }
  32.  
  33.  
  34.  
  35. void IDAP_term(void)
  36.  
  37. {
  38.  
  39.  // Вещи, которые нужно делать при выходе, обычно вы ставите любые
  40.  
  41.  // очистные работы здесь.
  42.  
  43.  return;
  44.  
  45. }
  46.  
  47.  
  48.  
  49.  // The plugin method
  50.  
  51. static bool idaapi IDAP_run(size_t )
  52.  
  53. {
  54.  
  55.  warning("Hello exelab!"); //Выводит окно предупреждения
  56.  
  57.  msg("Hello world!"); //Выводит текст сообщения в окно вывода
  58.  
  59.  return false;
  60.  
  61. }
  62.  
  63.  
  64.  
  65.  // Имеющий первостепенное значение экспортируемый объект PLUGIN
  66.  
  67. plugin_t PLUGIN =
  68.  
  69. {
  70.  
  71. IDP_INTERFACE_VERSION,                // Версия Ida , для которой написан плагин
  72.  
  73.          0,                                        // Флаги (см. ниже)
  74.  
  75.          IDAP_init,                        // Функция инициализации
  76.  
  77.          IDAP_term,                        // Функция очистки
  78.  
  79.          IDAP_run,                        // Основное тело плагина
  80.  
  81.          IDAP_comment,                // Комментарий - не используется
  82.  
  83.          IDAP_help,                        // Как и выше - не используется
  84.  
  85.          IDAP_name,                        // Отображаемое имя плагина в Edit->Plugins menu
  86.  
  87.          IDAP_hotkey                        // Горячие клавиши для запуска плагина
  88.  
  89.  
  90.  
  91. };


с удовольствием приму ваши замечания и исправления .

| Сообщение посчитали полезным: sty

Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 31 марта 2019 11:16 · Поправил: DrVB_5_6
· Личное сообщение · #7

sty пишет:
Про плугины-питоны даже и речи не было

Да блин, SDK откройте, папка "Hello" или что-то близкое.
Там плагины 3-х типов: C++, Python, IDC.
Что там непонятного?... Что ещё разжевывать надо?
Какие ещё примеры нужны?
Да на Питоне все скрипты в исходниках! На Гитхабе поискать религия не позволяет?
Поисковики-то все заблокированы? Блин, детский сад... Что, до сих пор мама с ложечки кормит и попку вытирает?...

sty пишет:
Может вам стоит привести какой-нибудь простой пример на Питоне? Причем, по-моему, к этому примеру должен быть приложен какой-нибудь простенький exe-файл. Чтобы начинающий плагинописатель точно бы знал, что в результате применения плагина на Питоне с файлом должно произойти то-то и то-то.

А может ещё и тарелочку с голубой каёмочкой, с ключиком от квартиры, где ...
Впрочем, не удивлюсь, если и эту фразу (почти цитата) не поимут горе-ученики...

sty пишет:
Кто знает, может мой скилл в ближайшее время прилично вырастет и я вам еще пригожусь.

Во! Новая версия сказки про "Конька-Горбунка".
Такими темпами, как до Китая раком!!!... В азы въехать не удосужились, куда уж больше-то?...

Добавлено спустя 7 минут
e_sergey пишет:
с удовольствием приму ваши замечания и исправления .

А что тут исправлять-то? Что замечать-то?
Нужно Ильфаку на сертификацию отправить...

Просто круто!!!

| Сообщение посчитали полезным: Orlyonok

Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 31 марта 2019 13:03
· Личное сообщение · #8

f13nd пишет:
В них возможно и кнопку забиндить на выполнение скрипта и даже графические какие-нибудь приблуды сооружать. Ну или да, питоноплагины тоже в удобстве превосходят цэ.


т.е вы хотите сказать что в си нельзя написать интерфеис для "общения" с плагином ?

а на счет юмора - все через это проходят , тем более когда задают глупые вопросы ...
хочется человеку - пусть юморит .




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 31 марта 2019 13:13
· Личное сообщение · #9

e_sergey пишет:
т.е вы хотите сказать что в си нельзя написать интерфеис для "общения" с плагином ?

Разумеется можно, штаны через голову тоже можно надеть. Разница в усилии, которое надо приложить. Кроме того, если питон сейчас приоритетней, можно столкнуться с чем-нибудь, что в непитоновых плагинах успели сломать и не позаботились об исправлении, как с некоторыми функциями в IDC получилось в 7й версии иды.

-----
2 оттенка серого




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 31 марта 2019 13:25 · Поправил: e_sergey
· Личное сообщение · #10

Спасибо
значит теперь след шагом нужно попробовать добавить интерфеис си плагину

ещё вопрос - когда компилируется длл или происходит сборка - слишком много сообщении о том ,
что типа в ida sdk файлах , на которые #include в коде , много несоответствий приведения типов size_t к типу int
и типа возможна утечка памяти ...

на это стоит обращать внимание ?




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 01 апреля 2019 08:10 · Поправил: f13nd
· Личное сообщение · #11

e_sergey пишет:
происходит сборка - слишком много сообщении о том

Сообщения типа warning информационные, если error'ы повалят, тогда стоит задуматься. Само предупреждение о том, что ты используешь один тип переменной в качестве переменной другого типа. Раз это варнинг, а не егор, значит студия смогла разобраться как их стыковать. Какой-нибудь ортодоксальный сишник может заявить, что это недопустимая ситуация и все типы должны использоваться правильно, потому что иначе возможны ужасные баги, но на самом деле значение имеет только длина поля переменной и знак, если это число (знак только если ты арифметику или операторы сравнения на него применяешь, а не тупо передаешь другой функции).

-----
2 оттенка серого


| Сообщение посчитали полезным: e_sergey


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 01 апреля 2019 09:03 · Поправил: plutos
· Личное сообщение · #12

e_sergey пишет:
слишком много сообщении


Если однотипных предупреждений (warnings) очень много, но точно известно какова их природа и программист уверен, что они не опасны, то обычно используют
--> pragma warning<--

Code:
  1. #pragma warning(
  2.     warning-specifier : warning-number-list [; warning-specifier : warning-number-list...] )
  3. #pragma warning( push[ ,] )
  4. #pragma warning( pop )

Oтфильтровав то, что опасности не представляет, можно сосредоточиться на действительно серьезных вещах.
Удобно, облегчает анализ выхлопа.

-----
Give me a HANDLE and I will move the Earth.


| Сообщение посчитали полезным: e_sergey

Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 01 апреля 2019 12:07 · Поправил: e_sergey
· Личное сообщение · #13

Спасибо
Но сообщения о несоответствии типов идут из sdk функции
к коду хелло ворд они не имеют отношений
так как он практически пустой - там ещё нечему и не с чем сбоить

вечером скину код sdk и сообщения студии
я пробовал изменить тип переменной - сообщения пропадают

Добавлено спустя 7 часов 5 минут
Всем привет

вот сообщения в окне вывода после сборки

Code:
  1. 1>d:\idasdk70\include\pro.h(3323): warning C4267: аргумент: преобразование из "size_t" в "int"; возможна потеря данных
  2. 1>d:\idasdk70\include\idp.hpp(1640): warning C4244: инициализация: преобразование "ssize_t" в "int", возможна потеря данных
  3. 1>d:\idasdk70\include\idp.hpp(1741): warning C4244: return: преобразование "ssize_t" в "int", возможна потеря данных
  4. 1>d:\idasdk70\include\idp.hpp(1745): warning C4244: return: преобразование "ssize_t" в "int", возможна потеря данных
  5. 1>d:\idasdk70\include\idp.hpp(1749): warning C4244: return: преобразование "ssize_t" в "int", возможна потеря данных
  6. 1>d:\idasdk70\include\idp.hpp(1753): warning C4244: return: преобразование "ssize_t" в "int", возможна потеря данных
  7. 1>d:\idasdk70\include\idp.hpp(1757): warning C4244: return: преобразование "ssize_t" в "int", возможна потеря данных


их там вагон

идет очень много return notify(ev_newprc, pnum, keep_cfg);
с разными параметрами и во многих случаях идут выше опубликованные сообщения

далее код определения notify
Code:
  1.   /// Event notification handler
  2.   hook_cb_t *_notify;
  3.   ssize_t notify(event_t event_code, ...)
  4.   {
  5.     va_list va;
  6.     va_start(va, event_code);
  7.     ssize_t code = invoke_callbacks(HT_IDP, event_code, va);
  8.     va_end(va);
  9.     return code;
  10.   }





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 апреля 2019 07:42 · Поправил: f13nd
· Личное сообщение · #14

e_sergey пишет:
Но сообщения о несоответствии типов идут из sdk функции, к коду хелло ворд они не имеют отношений

/posix/bits/posix1_lim.h
Code:
  1. /* Largest value of a `ssize_t'. */
  2. #define  _POSIX_SSIZE_MAX   32767

ssize_t это специальный size_t из posix, который может принимать отрицательные значения. И судя по заголовкам он 16битный (32767 = 0x7FFF, как раз 15 бит и 1 бит знак), а int 32битный со знаком. Расширить 16битное число со знаком до 32 бит просто - взять 15й бит, если он единица, выставить все разряды с 16го по 31 включительно в 1, иначе 0. Студия с этим справилась, но предупредила о возможных трагических потерях - весь int в ssize_t не влезет. Почему в сдк такое несоответствие допущено - вопрос к авторам сдк.

ЗЫ: сейчас подумалось, что int необязательно 32 бита и в некоторых конпеляторах он 16 бит, там все с этим преобразованием нормально должно быть. Вобщем не пытайся понять сишников, жми F7, скомпилировалось и ладно.

-----
2 оттенка серого





Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 апреля 2019 10:00
· Личное сообщение · #15

Непонятно чем вы тут занимаетесь, смотрим pro.h
Code:
  1. /// Signed size_t - used to check for size overflows when the counter becomes
  2. /// negative. Also signed size_t allows us to signal an error condition using
  3. /// a negative value, for example, as a function return value.
  4. #if !defined(_SSIZE_T_DEFINED) && !defined(__ssize_t_defined) && !defined(__GNUC__)
  5. typedef ptrdiff_t ssize_t;
  6. #endif

а вообще-то надо в студии просто поставить уровень предупреждений на W3

-----
Everything is relative...


| Сообщение посчитали полезным: e_sergey

Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 02 апреля 2019 10:03
· Личное сообщение · #16

f13nd
Спасибо

вчера попробовал поработать с функциями из IDA PLUG-IN WRITING on C++ .pdf
с десяток или более получилось переписать по новому , сообщения с результатами выводятся

я так понимаю - много определений констант , переменных и прочего изменилось

теперь буду заливать и исходники проектов
чтоб вам проще было и нагляднеи




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 апреля 2019 10:56
· Личное сообщение · #17

Vamit пишет:
Непонятно чем вы тут занимаетесь, смотрим pro.h

Отлично, только это не объясняет почему warning

-----
2 оттенка серого




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 02 апреля 2019 11:36
· Личное сообщение · #18

я менял
ssize_t
на int

все варнинги пропадали
оставалось пару - я понял что это sdk ные предупреждения и не полез дальше , вернул все на место




Ранг: 69.9 (постоянный), 83thx
Активность: 0.140.73
Статус: Участник

Создано: 02 апреля 2019 15:50
· Личное сообщение · #19

f13nd пишет:
только это не объясняет почему warning

Ты же сам ответил:
f13nd пишет:
Студия с этим справилась, но предупредила о возможных трагических потерях - весь int в ssize_t не влезет.





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 02 апреля 2019 16:03
· Личное сообщение · #20

morgot пишет:
Ты же сам ответил

ptrdiff_t 32/64 бита в зависимости от платформы.

-----
2 оттенка серого





Ранг: 69.9 (постоянный), 83thx
Активность: 0.140.73
Статус: Участник

Создано: 02 апреля 2019 16:46 · Поправил: morgot
· Личное сообщение · #21

f13nd
значит, в этом и дело, int то вроде как всегда 32 битный (имею ввиду современные ОС). Вот тут кое что есть (если конечно интересно погружаться во все эти сишные нюансы). --> Link <--




Ранг: 331.1 (мудрец), 561thx
Активность: 0.190.06
Статус: Участник

Создано: 02 апреля 2019 20:03
· Личное сообщение · #22

Вы читать умеете:
а вообще-то надо в студии просто поставить уровень предупреждений на W3
А предупреждения лезут с уровня W4, неужто сложно посмотреть описание на warning C4244:, любое SDK любой Иды компилируется студией без ошибок и вниманий, если правильно к делу подойти. А вам прежде чем писать плагины нужно студию изучить.

-----
Everything is relative...




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 02 апреля 2019 20:40
· Личное сообщение · #23

Vamit
друга там и стоит w3



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 02 апреля 2019 21:02
· Личное сообщение · #24

e_sergey пишет:
я менял
ssize_t
на int

Чему ptrdiff_t был равен у тебя?



Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 02 апреля 2019 21:11
· Личное сообщение · #25

--> Видео <--



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 02 апреля 2019 21:15
· Личное сообщение · #26

Там не видна декларация ptrdiff_t. Покажи ее.



Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 02 апреля 2019 21:24
· Личное сообщение · #27

Вы имеете ввиду активную платформу ?



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 02 апреля 2019 21:27
· Личное сообщение · #28

e_sergey
Я имею ввиду выбрать этот ssize_t, ткнуть на него - найти определение, потом тоже самое с ptrdiff_t чтобы выйти на то что это на самом деле при твоих текущих настройках проекта, включая включенные/невключенные дефайны.



Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 02 апреля 2019 21:36
· Личное сообщение · #29

--> видео 1<--



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 02 апреля 2019 21:40
· Личное сообщение · #30

Ну вот тебе и ответ, ssize_t это int64, потому что у тебя проект x64, варнинги от студии тебе соответственно потому что в int пишется значение int64.

| Сообщение посчитали полезным: Vamit, e_sergey

Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 02 апреля 2019 21:45 · Поправил: e_sergey
· Личное сообщение · #31

Друга - это стандартные фаилы SDK - значит писать надо типа для 32 битной платформы , но использовать lib для 64 битного пакета , так что ли ?


<< . 1 . 2 . 3 . 4 . >>
 eXeL@B —› Обсуждение статей —› [ northdemon ] Разработка трассировочного плагина для IDA
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати