Как понимать прибавленное смещение к паттерну? Как искать на пример его в иде и зачем их вообще добавляют? Почему нельзя чистым паттерном? пример:
Посмотреть вложение 173099
обычно паттерны используют для поиска мест, куда вернется вызов функции, адрес функции, или же поиск dword/qword нужных тебе для работы.
компиляторы в большинстве своем генерируют один и тот же код. следовательно паттерны будут на том же месте.
вопросами, в IDA Pattern style, или же вопросами в маске помечаются места, где последовательность набора байт может меняться от версии к версии(например qword/dword). смещения используют для того, чтобы получить нужное место. в случае с e8 ? ? ? ? + 0x1 мы получаем адрес на те 4 байта которые помечены в паттерне как вопросик. далее уже в зависимости от твоей необходимости обрабатывается адрес. получается адрес функции(в твоем случае), или же адрес на qword/dword.
во многих случаях при составлении паттернов можно найти на один и тот же паттерн несколько результатов. для этого используют например увеличение количества байт для составления паттерна. их могут добавлять как в начало, так и в конец. в случае с добавлением в начало, тебе придется смещать через оффсет, для получения нужного тебе адреса.
например:
мне нужно получить dword_152f25a8
сделав паттерн вида: 8b 0d
? ? ? ? 56, при его поиске мне выдаст очень большое количество вхождений.
для получения адреса 152f25a8 мне нужно к этому паттерну при его нахождении сделать + 0x2
но так как вхождений очень много, я могу найти далеко не тот вариант который нужен мне.
тогда я могу пойти по варианту увеличения байт в паттерне. обычно увеличивают вниз. но в данном случае мы увеличим наверх, для того чтобы показать на примере как это работает.
паттерн вида:
89 4d f4 8b 0d ? ? ? ? 56 уже имеет всего два вхождения. первое из которых является нужным мне.
но смещение 0x2 уже не актуально для этого паттерна. и смещение теперь будет 0x5. так как мы добавили 3 байта в начало.