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

Discussion in 'WASM.BEGINNERS' started by maestro-ant, Nov 16, 2006.

  1. maestro-ant

    maestro-ant Member

    Blog Posts:
    0
    что кроме SizeOfRawData надо изменить, для того чтобы разширить последнюю секцию?
     
  2. rmn

    rmn Well-Known Member

    Blog Posts:
    0
    собственно, VirtualSize в заголовке секции и SizeOfImage в OptionalHeader
     
  3. asd

    asd New Member

    Blog Posts:
    0
    Дописать на диск в конец файла что-нибудь по размеру равное NewSizeOfRawDat - OldSizeOfRawDat. Если при этом ещё увеличиваешь VirtualSize, то надо поправить поле SizeOfImage
     
  4. maestro-ant

    maestro-ant Member

    Blog Posts:
    0
    Тоесть SizeOfRawData увеличиь на рзмер дописаных байтов и всё, можно ниче больше не трогать?
     
  5. Freeman

    Freeman New Member

    Blog Posts:
    0
    хм.
    и не забудь про выравнивание
     
  6. maestro-ant

    maestro-ant Member

    Blog Posts:
    0
    ..читая доки не совсем понял.
    было так:
    VirtualSize = 867d
    SizeOfRawData = 1024d
    SizeOfImage = 8192d

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

    Freeman New Member

    Blog Posts:
    0
    Сумма VirtualSize-ов секций + 1000(типа размер заголовков, округленный)
     
  8. asd

    asd New Member

    Blog Posts:
    0
    ImageBase=VirtualAddress+VirtualSize последней секций.
     
  9. rmn

    rmn Well-Known Member

    Blog Posts:
    0
    asd
    интересный вариант :)
     
  10. rmn

    rmn Well-Known Member

    Blog Posts:
    0
    maestro-ant
    Что такое SizeOfImage? Это размер заголовков плюс сумма виртуальных размеров всех секций:
    SizeOfImage = SizeOfHeaders + VirtualSizeOfSections;

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

    asd New Member

    Blog Posts:
    0
    rmn
    Вроде как стандартный:)

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

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

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

    Blog Posts:
    0
    asd
    ImageBase == 0x00400000 практически во всех exe.
     
  13. Asterix

    Asterix New Member

    Blog Posts:
    0
    это почему?
     
  14. asd

    asd New Member

    Blog Posts:
    0
    Quantum,Asterix
    SizeOfImage, конечно, а не ImageBase.
     
  15. Asterix

    Asterix New Member

    Blog Posts:
    0
    asd

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

    ??
     
  16. asd

    asd New Member

    Blog Posts:
    0
    Почему не знаю, но вот файлик. Если считать через VA, то 12000h. Если через RawSize 12200h. В заголовке 12200 - всё работает. Ставим 12000 - не работает, ставим 12200 -работает. Есть ещё 1 такой же.
     
  17. Freeman

    Freeman New Member

    Blog Posts:
    0
    asd
    тогда уж проверять является ли последняя в таблице секций секция последней в памяти.