[Wisp-cvs] wisp/users/dig pe.py,1.29,1.30 pe.tran,1.11,1.12
Status: Alpha
Brought to you by:
digg
From: <di...@us...> - 2003-05-19 14:19:25
|
Update of /cvsroot/wisp/wisp/users/dig In directory sc8-pr-cvs1:/tmp/cvs-serv25589 Modified Files: pe.py pe.tran Log Message: cleaner PE headers via symbol defaults Index: pe.py =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/pe.py,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- pe.py 19 May 2003 13:54:50 -0000 1.29 +++ pe.py 19 May 2003 14:19:20 -0000 1.30 @@ -49,36 +49,17 @@ b.place_symbol('#mz/blocks-in-file', (b.filesz() + 0x1FF) / 0x200) return b -def populate_pe_directories (linkie, base, **given): - defaults = { - '&export-table': base, '#export-table/size': 0, - '&resource-table': base, '#resource-table/size': 0, - '&exception-table': base, '#exception-table/size': 0, - '!cert-table': 0, '#cert-table/size': 0, - '&base-rel-table': base, '#base-rel-table/size': 0, - '&debug-data': base, '#debug-data/size': 0, - '&arch-specific': base, '#arch-specific/size': 0, - '&global-pointer': base, - '&tls': base, '#tls/size': 0, - '&load-config-table': base, '#load-config-table/size': 0, - '&bound-import-table': base, '#bound-import-table/size': 0, - '&import-address-table': base, '#import-address-table/size': 0, - '&delay-import-descr': base, '#delay-import-descr/size': 0, - '&COM+-runtime-header': base, '#COM+-runtime-header/size': 0, - } - for sym, defval in defaults.items(): - if given.has_key(sym): linkie.place_symbol(sym, given[sym]) - else: linkie.place_symbol(sym, defval) - def make_pe_executable (text = None, data = None, bss = None, base_address = 0x00400000): e = Linkie('<'); e.glue(0, make_pe_mz_stub('OS too broken'), 0x100) if e.memsz() < 0x80: e.align(0x80) # attempt to create a file(1)-friendly exe + base_address = roundup(base_address, 0x1000) # to page boundary + e.place_symbol('#rva', -base_address) # adding this to an address will yield RVA do = Interpreter(e).do do('needs pe') - do('make-pe-header') + do(`base_address` + ' make-pe-header') text = text.copy() # so we won't add import stubs to the original linkie imports = Linkie('<') sectnames = ['.text', '.data', '.bss', '.imports'] @@ -153,7 +134,6 @@ # paste sections together e.align(512) - base_address = roundup(base_address, 0x1000) # to page boundary memory_boundary = base_address memory_boundary += 0x1000 # skip the first page for s in sectnames: @@ -190,7 +170,6 @@ e.place_symbol('#aout/data-size', roundup(data.memsz(), 0x200)) e.place_symbol('#aout/bss-size', roundup(bss.memsz(), 0x200)) e.place_symbol('#aout/image-base', base_address) - e.place_symbol('#rva', -base_address) # adding this to an address will yield RVA e.place_symbol('#aout/memory-align', 4096) e.place_symbol('#aout/file-align', 512) # 4.0 = MSW95 @@ -211,7 +190,6 @@ # Note that null RVAs are those that equal base_address e.place_symbol('#aout/dict-entry-count', 16) - populate_pe_directories(e, base_address) e.align(512) e.link() Index: pe.tran =================================================================== RCS file: /cvsroot/wisp/wisp/users/dig/pe.tran,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- pe.tran 19 May 2003 13:54:51 -0000 1.11 +++ pe.tran 19 May 2003 14:19:20 -0000 1.12 @@ -43,7 +43,7 @@ mingle #*/flags t, ; -:[ ] make-pe-aout-header +:[ ] make-pe-aout-header \ ( base-address -- ) \ &aout/image-end must be a multiple of #aout/memory-align \ !aout/header-end must be a multiple of #aout/file-align 4 align @@ -83,40 +83,41 @@ '#aout/heap-commit-size t, 0 t, \ loader flags -- obsolete '#aout/dict-entry-count t, - '&export-table '#rva + t, - '#export-table/size t, + '&export-table over by-default '#rva + t, + '#export-table/size (opt) t, '&.imports '#rva + t, '#.imports/memsz t, - '&resource-table '#rva + t, - '#resource-table/size t, - '&exception-table '#rva + t, - '#exception-table/size t, - '!cert-table t, - '#cert-table/size t, - '&base-rel-table '#rva + t, - '#base-rel-table/size t, - '&debug-data '#rva + t, - '#debug-data/size t, - '&arch-specific '#rva + t, - '#arch-specific/size t, - '&global-pointer '#rva + t, - 0 t, - '&tls '#rva + t, - '#tls/size t, - '&load-config-table '#rva + t, - '#load-config-table/size t, - '&bound-import-table '#rva + t, - '#bound-import-table/size t, - '&import-address-table '#rva + t, - '#import-address-table/size t, - '&delay-import-descr '#rva + t, - '#delay-import-descr/size t, - '&COM+-runtime-header '#rva + t, - '#COM+-runtime-header/size t, + '&resource-table over by-default '#rva + t, + '#resource-table/size (opt) t, + '&exception-table over by-default '#rva + t, + '#exception-table/size (opt) t, + '!cert-table (opt) t, + '#cert-table/size (opt) t, + '&base-rel-table over by-default '#rva + t, + '#base-rel-table/size (opt) t, + '&debug-data over by-default '#rva + t, + '#debug-data/size (opt) t, + '&arch-specific over by-default '#rva + t, + '#arch-specific/size (opt) t, + '&global-pointer over by-default '#rva + t, + 0 t, + '&tls over by-default '#rva + t, + '#tls/size (opt) t, + '&load-config-table over by-default '#rva + t, + '#load-config-table/size (opt) t, + '&bound-import-table over by-default '#rva + t, + '#bound-import-table/size (opt) t, + '&import-address-table over by-default '#rva + t, + '#import-address-table/size (opt) t, + '&delay-import-descr over by-default '#rva + t, + '#delay-import-descr/size (opt) t, + '&COM+-runtime-header over by-default '#rva + t, + '#COM+-runtime-header/size (opt) t, 0 t, 0 t, + drop \ discard base-address ; -:[ ] make-pe-header +:[ ] make-pe-header \ ( base-address -- ) 8 align \ PE header must be aligned to 8 label !pe "PE" times b, 0 w, \ magic |