[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
|