[LLVMdev] Identifying functions writing to memory at LLVM-IR level

John Criswell criswell at illinois.edu
Thu May 29 12:23:42 PDT 2014


On 5/29/14, 12:04 PM, Saeed, Ahmed wrote:
>
> Dear All,
>
> I am new to LLVM and using it create a simple pass for array bounds 
> checking.
>

Are you performing static array bounds checking within the compiler, or 
are you adding code to the program to check array bounds when the 
program is executed?

> How can i retrieve pointer to a memory area that is accessed by a 
> function call . I have written a Pass that can intercept function 
> calls and detect whether it is writing to a memory on not using 
> Instruction::mayWriteToMemory(). Whether a function accessing memory 
> or not can be checked by Instruction::mayReadFromMemory() and 
> Instruction::mayWriteToMemory() but how can i get staring address of 
> those memory areas (program variables) that are being written by.
>

For static array bounds checking, you'll need to use a points-to 
analysis (e.g., DSA from the poolalloc project) to get an approximation 
of the memory objects accessed by a pointer.

For dynamic array bounds checking, you'll need to instrument the program 
so that the bounds of all memory objects are recorded in side data 
structures and then add code before strcpy() to find the bounds 
information associated with a given pointer using those side data 
structures.

The SAFECode compiler (http://sva.cs.illinois.edu) instruments code to 
do dynamic array bounds checking.  If you want to check for dynamic 
array bounds violations, SAFECode already does that (as does SoftBound, 
which is included in the SAFECode source code).  Address Sanitizer 
pretty much does this, too, although its design can permit out-of-bounds 
array indexing violations if the pointer arithmetic uses very large strides.

Regards,

John Criswell

> For example, for the c code
>
> int main(){
>
> char arrd[]="This is destination ";
>
> char arrs[]="COPIED STRING";
>
> strcpy(arrd, arrs);
>
> printf("Final copied string : %s\n", arrd);
>
> return 0;
>
> }
>
> Does LLVM at IR level provide such functionality to intercept call to 
> "strcpy" and provide starting and end address of any data variables 
> being written by it?
>
> Regards,
>
> Ahmed Saeed,
>
> Research Student,
>
> Glasgow Caledonian University, UK.
>
>
> Glasgow Caledonian University is a registered Scottish charity, number 
> SC021474
>
>
> _______________________________________________
> 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/20140529/11849bc4/attachment.html>


More information about the llvm-dev mailing list