eXeL@B —› Программирование —› Как расширить Size Of Headers? |
Посл.ответ | Сообщение |
|
Создано: 12 октября 2008 19:03 · Личное сообщение · #1 |
|
Создано: 12 октября 2008 19:21 · Поправил: arnix · Личное сообщение · #2 |
|
Создано: 12 октября 2008 19:27 · Личное сообщение · #3 |
|
Создано: 12 октября 2008 20:09 · Поправил: arnix · Личное сообщение · #4 Ну Во 1-ых кури доки по PE так или иначе пригодится А так, примерно так: нужно смотреть на значение "File Alignment", потому что сместить другие секции можно значением кратным "File Alignment". Будем считать что у нас "Size Of Headers" = 0х400, "File Alignment" = 0х200 и хотим сделать "Size Of Headers" = 0х600. Все что нужно - это изменить значение "Size Of Headers" на 0х600, сместить все что после 0х400 на 0х200, тойсть то что раньше было на 0х400 сейчас окажется на 0х600. И последнее - нужно менять значения Raw Offset всех секций (тойсть увеличить эти значения на 0х200). Вот и все. Добавлено: Кстати, если есть таблица релоков, их тоже нужно соответственно исправлять. |
|
Создано: 12 октября 2008 20:23 · Личное сообщение · #5 arnix пишет: Ну Во 1-ых кури доки по PE так или иначе пригодится А так, примерно так: нужно смотреть на значение "File Alignment", потому что сместить другие секции можно значением кратным "File Alignment". Будем считать что у нас "Size Of Headers" = 0х400, "File Alignment" = 0х200 и хотим сделать "Size Of Headers" = 0х600. Все что нужно - это изменить значение "Size Of Headers" на 0х600, сместить все что после 0х400 на 0х200, тойсть то что раньше было на 0х400 сейчас окажется на 0х600. И последнее - нужно менять значения Raw Offset всех секций (тойсть увеличить эти значения на 0х200). Вот и все. Тоесть нужно тольоко изменить значение Size Of Headers на нужное и изменить Raw Offset всех секций? |
|
Создано: 12 октября 2008 20:25 · Личное сообщение · #6 |
|
Создано: 12 октября 2008 20:30 · Личное сообщение · #7 |
|
Создано: 12 октября 2008 20:33 · Личное сообщение · #8 |
|
Создано: 13 октября 2008 03:37 · Поправил: coderess · Личное сообщение · #9 |
|
Создано: 13 октября 2008 06:27 · Личное сообщение · #10 Size Of Headers это PE+0x14? тогда у всех нормальных файлов оно равно 0xE0, при этом таблица секций расположена сразу за PE заголовком (за таблицей дирекрорий), по смещению PE+0xF8 соответственно смещение таблицы секций: __section_table= __PE+0x18+__headers_size а __headers_size (SizeOfHeaders) для заданного смещения таблицы секций равно __headers_size = __section_table - __PE-0x18 |
|
Создано: 13 октября 2008 07:28 · Поправил: PE_Kill · Личное сообщение · #11 arnix пишет: Кстати, если есть таблица релоков, их тоже нужно соответственно исправлять. А при чем здесь релоки? Все DataDirs указывают на виртуальные офсеты, в таблице релоков блоки описывают тоже виртуальные офсеты, ну а сами фиксапы являются офсетами от начала описываемого виртуального офсета. Там нигде нет привязки к рав офсету. Единственное наверное это баунд импорт, тем более он обычно находится как раз в PE хэдере, его тоже надо будет смещать. Ну может что еще именно такое извращенское и редко встречающееся, хотя вряд ли. ----- Yann Tiersen best and do not fuck |
|
Создано: 13 октября 2008 13:08 · Поправил: arnix · Личное сообщение · #12 PE_Kill Если честно в последний раз с релоками имел дело давно и точно не помню члены структыры, я просто открыл длл в LordPE а там было Offset: http://img524.imageshack.us/my.php?image=30308843hr5.png так что если это не file offset а "сами фиксапы являются офсетами от начала описываемого виртуального офсета" то тада я был не прав в этом ) |
|
Создано: 13 октября 2008 21:11 · Личное сообщение · #13 PE_Kill Пардон. А если, например, мы хотим "прилично" увеличить размер заголовков, так, что новый размер будет больше Section Alignment и "выползет" на первую секцию. Вот тогда и надо будет пересчитывать помимо всего RVA всех секций ну и релоки тоже придется. Хотя я уже наверно всё забыл, может что-то и путаю) |
|
Создано: 13 октября 2008 21:47 · Поправил: ADACH · Личное сообщение · #14 я делал так Code:
|
eXeL@B —› Программирование —› Как расширить Size Of Headers? |