Rebase - Must Get!
Programmers, you must check this out. Saves HOURS of work. I finally got a copy of it
Rebase is a command-line tool that you can use to specify the base addresses for the DLLs that your application uses.
The base address of a DLL is the location in virtual memory where the loader attempts to place the DLL. It is generally specified at link time. If a DLL cannot load at its base address because the memory is already occupied, the loader places the DLL elsewhere in virtual memory, then updates all calls into the DLL to reflect the new base address. Making these changes can be time consuming, because the image must be copied to the pagefile and modified for the new address. If you have a large application that uses many DLLs, it is important for each DLL to have a different base address to minimize load time. You will receive the following warning from the loader if a DLL is relocated:
LDR: Automatic DLL Relocation in ProcessName.
LDR: DLL ImageName base ImageBase relocated due to collision with ExistingImage.
When you pass all the DLLs for your application to Rebase, it bases each DLL at a unique address. You should not pass your .EXE file to Rebase. It is the first thing to be loaded, so there is no chance that something else can already be loaded at its default load address.
The system DLLs are currently based in memory from 0x70000000 to 0x78000000 (0x68000000 to 0x78000000 on MIPS). Therefore, you should base your DLLs from 0x60000000 to 0x68000000. One possible scheme is to choose a base address based on the first letter of the DLL name.
First letter Base address
A - C 0x60000000
D - F 0x61000000
G - I 0x62000000
J - L 0x63000000
M - O 0x64000000
P - R 0x65000000
S - U 0x66000000
V - X 0x67000000
Y - Z 0x68000000
It is best to base DLLs from the top of the address range down, instead of from the bottom up. Dynamic memory is allocated from the bottom up and if a DLL tries to load where dynamic memory has been allocated, it will be relocated, just as if a DLL was loaded at that address.
To use Rebase to base your DLLs, use the following syntax:
rebase [options] image-names
Rebase has the following command-line options:
Use the specified initial base address. It is mandatory that you use either the -b or -i option.
Read base addresses from the file coffbase_filename. It is mandatory that you use either the -b or -i option.
Write the list of base addresses to the file coffbase_filename. The filename extension is not included. Use -C to include filename extensions.
Perform a top-down rebase.
Write image bases to log file.
Allow rebasing the system file.
Set a root directory for use by the -G, -O, -N options.
Group specified images together in address space. May be used multiple times. Specify a root directory with the -R option.
Leave specified images at their original addresses. May be used multiple times. Specify a root directory with the -R option.
Overlay images in address space. May be used multiple times. Specify a root directory with the -R option.
Extract debug information into separate .DBG file before rebasing. Use symbol_dir to place the .DBG files are placed in the directories symbol_dir\EXE or symbol_dir\DLL, depending on whether the source is an .EXE file or a .DLL file. To specify the current directory for the symbol directory, use a period (.).
Used with the -x option. Remove private debug information when creating .DBG files.
Used with the -x option. Extract all debug information into the .DBG files.
Strip relocations after rebasing the image. Causes failure to load.
Just sum image range.
Display command-line syntax.
|Thread Tools||Search this Thread|
|Rate This Thread|
All times are GMT -6. The time now is 21:36.