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