(Untitled)

Jul 15, 2011 09:42

Словил вчера забавный эффект ( Read more... )

Leave a comment

Comments 7

salnikov July 15 2011, 10:21:31 UTC
gdb меняет бинарник исполняемого файла?

Reply

netp_npokon July 15 2011, 13:29:26 UTC
Если бы менял, то objdump бы как раз это заметил. Он меняет сегмент кода в памяти, причем при попытках прочитать из этого места средствами самого gdb (print, disassemble) возвращает старое значение.
Игорь хорошую ссылку подогнал.

Reply


(The comment has been removed)

netp_npokon July 15 2011, 13:31:35 UTC
Писать ничего не пишу, портируем помаленьку :)

Reply


esyr July 15 2011, 19:59:17 UTC
int3 это первый курс, емнип. Как давно это было.

Reply


(The comment has been removed)

netp_npokon July 16 2011, 19:37:57 UTC
Я в курсе, да. Единственной новостью было то, что дебаггер не дает юзеру видеть этого прерывания, хотя программа его видит.

Reply


akovalenko July 18 2011, 04:27:56 UTC
(Наверное, очевидное, но...) проблема не в том, чтобы распарсить 0xCC, а в том, что на этом месте что-то лежало, и узнать что -- в общем случае невозможно (стало быть, и определить границу следующей инструкции -- тоже).

Правда, не знаю, какие у вас там прологи у системных функций -- если такие же однообразные, как в (каждой конкретной версии) ntdll.dll, оверрайдилку скорее всего можно научить не обижаться на gdb.

Reply

netp_npokon July 18 2011, 15:37:39 UTC
В данном случае на мысли о том, что что-то не так, меня натолкнуло именно то, что библиотека не смогла распарсить 0xCC. Там совсем плюшевый дизассемблер, буквально с десяток инструкций. Если бы смогла, то все было бы куда хуже -- уже из-за того, что следующая инструкция была бы испорчена.

Там для перехвата заменяются первые восемь байт функции, так что в общем случае помимо операций со стеком может попадаться всякий мусор, вплоть до инструкций jmp. При этом прологи различаются довольно сильно. Можно, конечно, замапить нужную библиотеку где-нибудь сбоку и сверяться с оригиналом, но это дороже, да и не к спеху.

Reply


Leave a comment

Up