netp_npokon: (Default)
netp_npokon ([personal profile] netp_npokon) wrote2011-07-15 09:42 am

(no subject)

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

Я использую библиотеку mach_override, которая, как выяснилось, является самым надежным способом подменить системную функцию в Mac OS: она просто парсит начало функции, откусывает от нее нужное число инструкций и заменяет их на переход в пользовательскую функцию.

Эта штука хорошо работала нативно, но отказывалась подменять нужную мне функцию под gdb -- не могла распарсить байт 0xCC. При этом ни objdump, ни сам gdb такого байта в этой функции не видели, поэтому что-либо отладить представлялось невозможным.

Разгадка же оказалась простой: 0xCC -- это прерывание int3, которое gdb воткнул в функцию, чтобы по моей же просьбе поставить там breakpoint. И не признавался, справедливо полагая, что неча пользователю об этом знать.

[identity profile] salnikov.livejournal.com 2011-07-15 10:21 am (UTC)(link)
gdb меняет бинарник исполняемого файла?

[identity profile] netp-npokon.livejournal.com 2011-07-15 01:29 pm (UTC)(link)
Если бы менял, то objdump бы как раз это заметил. Он меняет сегмент кода в памяти, причем при попытках прочитать из этого места средствами самого gdb (print, disassemble) возвращает старое значение.
Игорь хорошую ссылку подогнал.