On Oct 16, 2009, at 4:43 AM, Daniel Waterworth wrote:> Never mind, I used ExecutionEngine's InstallLazyFunctionCreator and > DisableSymbolSearching to cause malloc and free calls to be handled > by my logging functions. Sorry for the unnecessary list mail.No problem, this is a better way to go. The MallocInst and FreeInst instructions are about to be removed from LLVM IR. Malloc and free will be represented normal 'call' instructions.> Is it possible to find out the size and beginning pointer of the > current stack frame, from a function operating outside of the > virtual machine, but called by a function within it?I don't think so. Typically, applications that need this sort of thing get the address of the function and then do a fuzzy disassembly of the prolog. -Chris> > Thanks, > > Daniel > > 2009/10/16 Daniel Waterworth <da.waterworth at googlemail.com> > Hello, > > I'm writing a virtual machine that functions as a sandbox based on > llvm. In order to prevent programs from accessing memory that has > not been allocated to them, I want to replace calls to malloc and > free with calls to a logged functions that will record the memory > that is being allocated to the program. Is it possible to cast/ > convert a MallocInst or FreeInst to a CallInst? > > Thanks, > > Daniel > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20091016/efa96b69/attachment.html>
Thanks very much. I only have one more question, (hopefully), which is, is
there a better way of finding the direction of stack growth other than:
static bool StackCmp(void *ptr) {
volatile int a;
return (void *)&a > ptr;
}
bool FindStackDirection() {
volatile int a;
return StackCmp((void *)&a);
}
Preferably one which isn't destroyed by optimization.
Thanks again,
Daniel
2009/10/16 Chris Lattner <clattner at apple.com>
>
> On Oct 16, 2009, at 4:43 AM, Daniel Waterworth wrote:
>
> Never mind, I used ExecutionEngine's InstallLazyFunctionCreator and
> DisableSymbolSearching to cause malloc and free calls to be handled by my
> logging functions. Sorry for the unnecessary list mail.
>
>
> No problem, this is a better way to go. The MallocInst and FreeInst
> instructions are about to be removed from LLVM IR. Malloc and free will be
> represented normal 'call' instructions.
>
> Is it possible to find out the size and beginning pointer of the current
> stack frame, from a function operating outside of the virtual machine, but
> called by a function within it?
>
>
> I don't think so. Typically, applications that need this sort of thing
get
> the address of the function and then do a fuzzy disassembly of the prolog.
>
> -Chris
>
>
> Thanks,
>
> Daniel
>
> 2009/10/16 Daniel Waterworth <da.waterworth at googlemail.com>
>
>> Hello,
>>
>> I'm writing a virtual machine that functions as a sandbox based on
llvm.
>> In order to prevent programs from accessing memory that has not been
>> allocated to them, I want to replace calls to malloc and free with
calls to
>> a logged functions that will record the memory that is being allocated
to
>> the program. Is it possible to cast/convert a MallocInst or FreeInst to
a
>> CallInst?
>>
>> Thanks,
>>
>> Daniel
>>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20091016/4b65f92e/attachment.html>
On Oct 16, 2009, at 11:21 AM, Daniel Waterworth wrote:> Thanks very much. I only have one more question, (hopefully), which > is, is there a better way of finding the direction of stack growth > other than:That's a somewhat reasonable, but fragile way to go. Make sure to mark StackCmp with attribute(noinline). Don't be too surprised if it doesn't work on some compiler. I don't know a better way to do it though. -Chris> > static bool StackCmp(void *ptr) { > volatile int a; > return (void *)&a > ptr; > } > > bool FindStackDirection() { > volatile int a; > return StackCmp((void *)&a); > } > > Preferably one which isn't destroyed by optimization. > > Thanks again, > > Daniel > > 2009/10/16 Chris Lattner <clattner at apple.com> > > On Oct 16, 2009, at 4:43 AM, Daniel Waterworth wrote: > >> Never mind, I used ExecutionEngine's InstallLazyFunctionCreator and >> DisableSymbolSearching to cause malloc and free calls to be handled >> by my logging functions. Sorry for the unnecessary list mail. > > No problem, this is a better way to go. The MallocInst and FreeInst > instructions are about to be removed from LLVM IR. Malloc and free > will be represented normal 'call' instructions. > >> Is it possible to find out the size and beginning pointer of the >> current stack frame, from a function operating outside of the >> virtual machine, but called by a function within it? > > I don't think so. Typically, applications that need this sort of > thing get the address of the function and then do a fuzzy > disassembly of the prolog. > > -Chris > >> >> Thanks, >> >> Daniel >> >> 2009/10/16 Daniel Waterworth <da.waterworth at googlemail.com> >> Hello, >> >> I'm writing a virtual machine that functions as a sandbox based on >> llvm. In order to prevent programs from accessing memory that has >> not been allocated to them, I want to replace calls to malloc and >> free with calls to a logged functions that will record the memory >> that is being allocated to the program. Is it possible to cast/ >> convert a MallocInst or FreeInst to a CallInst? >> >> Thanks, >> >> Daniel >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20091016/9bdd1ac6/attachment.html>
Daniel Waterworth skrev:> Thanks very much. I only have one more question, (hopefully), which > is, is there a better way of finding the direction of stack growth > other than: > > static bool StackCmp(void *ptr) { > volatile int a; > return (void *)&a > ptr; > } > > bool FindStackDirection() { > volatile int a; > return StackCmp((void *)&a); > } > > Preferably one which isn't destroyed by optimization.I suggest you turn the scalars into arrays and make the ptr argument volatile as well. Other ways: If you are careful with tail recursion eliminiation, you can compare local var addresses from different recursive calls. I believe there are va_arg based approaches as well. That said, there is no truly portable way. /Stein Roger