Вопрос по PE-заголовкам. Написал аналог функции программы LordPE для увеличения SizeOfHeaders. Это необходимо для того, чтобы добавить новую секцию. Осуществляется это простым сдвигом содержимого всех секций на 0x200 байтов вперед, освобождая тем самым место для большего количество заголовков секций. Функция успешно работает применимо к exe-файлам. А вот драйверы - не запускаются, StartService возвращает 2001. Checksum само собой пересчитан, и все вроде как должно работать, но не работает. Может кто сталкивался с таким? Как решить проблему?
Заголовок можно расширять только в пределах RVA первой секции. Если заголовок вылазит за RVA первой секции, то придется двигать весь Image дальше по адресам.
спасибо, что-то я до очевидного не смог додуматься (( у меня же RVA первой секции == 0x200 и драйвер-то тут ни при чем, такая же фигня могла быть и с .exe...
перестраивать ресурсы - как раз не самое сложное - поскольку данные лишь сдвигаются, а не перемещаются из разных мест, то достаточно прибавить дельту ко всем смещениям
ну а таблицы импорта/экспорта? там ведь тоже всего лишь дельту прибавить нужно ко всем смещениям. просто ресурсы обходить чуток сложнее. или опять какие-то подводные камни? а то сейчас всплыла еще одна неочевидная проблема - при перестройке релоков. к каждому TypeOffset ведь тоже надо прибавлять дельту. а что, если TypeOffset равен, например, 0x3FFF ? тогда 0x3FFF+дельта выходит за пределы 0x1000. выходит, релоки полностью переписывать нужно. а пока я решил схитрить и освободить место под заголовок секции путем уменьшения NumberOfRvaAndSizes. задача добавления новой секции оказалось на самом деле не такой тривиальной, и выполнение этой задачи не всегда возможно
luckysundog Если дров твой, то задача решается перекомпиляцией с более бОльшим значением выравнивания для секций.