P
Paul Pluzhnikov
Greetings,
This is more of a programming question, and doesn't appear to quite
fit into this newsgroup. Please feel free to direct me to a more
appropriate forum (if one exists).
I have an application (compiler) which dumps its whole parse
tree into a file, and then re-loads it later (for precompiled
header processing), via MapViewOfFileEx().
Because the parse tree contains pointers, it must be re-loaded at
the same address it was when it was saved [1].
This works fine everywhere, but breaks on Vista(R) due to address
space layout randomization (ASLR).
I can try to map the file at the same address it was when it was
saved, but there is a chance that some DLL has already created a
Heap in that space, and then the mapping will fail.
Questions:
1. Is there any address range that is "safe" from ASLR placing a
Heap there? (I could then hard-code that address).
2. Is there any way to tell Vista that "this executable's address
space should not be randomized" ?
3. Any other way for an executable to "reserve" certain fixed
address region?
Thanks,
[1]. Yes, I know I can save the parse tree in an alternative format
(using offsets instead of pointers), and then I would not care what
the mapping address is. But this is significantly slower.
This is more of a programming question, and doesn't appear to quite
fit into this newsgroup. Please feel free to direct me to a more
appropriate forum (if one exists).
I have an application (compiler) which dumps its whole parse
tree into a file, and then re-loads it later (for precompiled
header processing), via MapViewOfFileEx().
Because the parse tree contains pointers, it must be re-loaded at
the same address it was when it was saved [1].
This works fine everywhere, but breaks on Vista(R) due to address
space layout randomization (ASLR).
I can try to map the file at the same address it was when it was
saved, but there is a chance that some DLL has already created a
Heap in that space, and then the mapping will fail.
Questions:
1. Is there any address range that is "safe" from ASLR placing a
Heap there? (I could then hard-code that address).
2. Is there any way to tell Vista that "this executable's address
space should not be randomized" ?
3. Any other way for an executable to "reserve" certain fixed
address region?
Thanks,
[1]. Yes, I know I can save the parse tree in an alternative format
(using offsets instead of pointers), and then I would not care what
the mapping address is. But this is significantly slower.