пятница, 10 декабря 2010 г.

Incremental Linking

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

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

Комментариев нет:

Отправить комментарий