Здравствуйте все! Прочитал данную статью и хочу, чтобы вы пожалуйста подсказали мне, как лучше сделать и объяснили, почему именно так. В общем: 1) а)В статье: нашли последнюю секцию(вирт. и физ.), и сразу внедряют в ее конец X-code(какой-нить свой код). Затем забивают оставшуюся часть памяти нулями. Размеры секции перед внедрением не выравнивают. А после внедрения - выровняли только VirtualSize и то, к нему прибавили невыровненный размер X-code. б)Может лучше так(?): перед внедрением выровнять длины секции. Затем внедриться. Ну а потом к каждому размеру секции прибавить выровненный на свой алигнмент размер X-code. 2) а)В статье один и тот же кусок кода(формула выравнивания) записан несколько раз. Может его лучше сделать как макрос?
Можно так. Ищешь последнюю секцию, проверяешь ее размер, если не нулевой, сравниваешь пространство от конца данных (начало секции + VirtualSize) до конца секции с размером внедряемого кода, если не достаточно, запускаешь цикл "увеличение секции до границы выравнивания - сравнение", потом пишешь свой код. Не забудь исправить ImageSize, VirtualSize и SizeOfRawData в заголовке. А разве они не выровнены ? Зачем его выравнивать ? Ну, ежели тока, байта на четыре...
Вроде как в таблице секций хранятся НЕвыровненные значения длин. Разве не так? и 2-ой вопрос: а что насчет макросов?
размеры секций не обязательно должны быть выровнены. а вот RVA и PA - да. правда другое дело что выравнивание можно и 1-1 поставить.