Разширение последней секции

Тема в разделе "WASM.BEGINNERS", создана пользователем maestro-ant, 16 ноя 2006.

  1. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    что кроме SizeOfRawData надо изменить, для того чтобы разширить последнюю секцию?
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    собственно, VirtualSize в заголовке секции и SizeOfImage в OptionalHeader
     
  3. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Дописать на диск в конец файла что-нибудь по размеру равное NewSizeOfRawDat - OldSizeOfRawDat. Если при этом ещё увеличиваешь VirtualSize, то надо поправить поле SizeOfImage
     
  4. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    Тоесть SizeOfRawData увеличиь на рзмер дописаных байтов и всё, можно ниче больше не трогать?
     
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    хм.
    и не забудь про выравнивание
     
  6. maestro-ant

    maestro-ant Member

    Публикаций:
    0
    Регистрация:
    23 июл 2006
    Сообщения:
    112
    ..читая доки не совсем понял.
    было так:
    VirtualSize = 867d
    SizeOfRawData = 1024d
    SizeOfImage = 8192d

    раздвигаю на размер 1024d.
    VirtualSize = 2048d
    SizeOfRawData = 2048d
    SizeOfImage = какое тут надо значение?
     
  7. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    Сумма VirtualSize-ов секций + 1000(типа размер заголовков, округленный)
     
  8. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    ImageBase=VirtualAddress+VirtualSize последней секций.
     
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    asd
    интересный вариант :)
     
  10. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    maestro-ant
    Что такое SizeOfImage? Это размер заголовков плюс сумма виртуальных размеров всех секций:
    SizeOfImage = SizeOfHeaders + VirtualSizeOfSections;

    Если мы увеличиваем размер какой-либо секции (а значит и VirtualSizeOfSections), то и SizeOfImage увеличится на такую же величину.
     
  11. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    rmn
    Вроде как стандартный:)

    maestro-ant
    Ещё надо учесть, что если VirtualSize последней секции = 0, то ImageBase=VirtualAddress+RawSize

    А вот на сумму VirtualSize секций полагаться совсем нельзя - они не обязанны быть выровненными, или вообще в 0 могут быть.
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    asd
    ImageBase == 0x00400000 практически во всех exe.
     
  13. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    это почему?
     
  14. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Quantum,Asterix
    SizeOfImage, конечно, а не ImageBase.
     
  15. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    asd

    почему
    "если VirtualSize последней секции = 0, то SizeOfImage=VirtualAddress+RawSize"

    ??
     
  16. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Почему не знаю, но вот файлик. Если считать через VA, то 12000h. Если через RawSize 12200h. В заголовке 12200 - всё работает. Ставим 12000 - не работает, ставим 12200 -работает. Есть ещё 1 такой же.
     
  17. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    asd
    тогда уж проверять является ли последняя в таблице секций секция последней в памяти.