[LLVMdev] Queries regarding function's arguments data type
John Criswell
criswell at illinois.edu
Mon Feb 25 11:54:08 PST 2013
On 2/25/13 1:44 PM, teja tamboli wrote:
> Hi all,
>
> I am working on my Master's project in security and I am trying to
> iterate over the argument list of the function. Basically I need to do
> following things :
Interesting. Just out of curiosity, can you tell us what your project
is about?
>
> 1. Check data type of each argument of the argument list of the function.
> 2. Based on its data type like character array or integer array,
> pointer, int, char, take different action.
> 3. I have added following code to check its data type.
There is one caveat when working with LLVM types: the type indicates
what the function *expects* to get as an argument; it does not represent
what the type of the actual memory object passed into the function will
be. A caller can cast a pointer of one structure type to a different
structure type and pass that into a function.
>
> // F is any function basically of type function *
> FunctionType *FTy = F->getFunctionType();
> unsigned int numArgs = FTy->getNumParams();
>
> //Currently just checking data type of the 0th argument. Eventually
> will be running it in the loop from 0 to numArgs.
> errs() << "\n1 Argument type int 32 : " <<
> FTy->getParamType(0)->isIntegerTy(32);
> errs() << "\n2 Argument type char : " <<
> FTy->getParamType(0)->isIntegerTy(8);
> errs() << "\n4 Argument type pointer : " <<
> FTy->getParamType(0)->isPointerTy();
> errs() << "\n5 Argument type array : " <<
> FTy->getParamType(0)->isArrayTy();
> errs() << "\n6 Argument type structure : " <<
> FTy->getParamType(0)->isStructTy();
>
> I can just find these many data types for integer and characters. This
> just tells me that parameter is of type pointer or array or structure.
>
> My question is if function's parameter type is pointer / array, how
> can I figure it out whether its character pointer or integer pointer?
You need to use dyn_cast<SequentialType> to convert the Type * into a
SequentialType *. With that, you can use
SequentialType::getElementType() to see what type of pointer type/array
type it is.
You can also use dyn_cast<> to cast to an ArrayType to get the declared
size of the array, or to a StructType so that you can examine the
structure type's fields.
You should be familiar with how to use dyn_cast<>(), and you should be
familiar with the LLVM type classes. The former is documented in the
LLVM Programmer's Manual, and the latter can be found within the doxygen
documentation.
-- John T.
> Also if it is a array then how can I find size of the array?
> In case of structure how to check exact structure definition I mean
> exactly it is instance of which structure?
>
> Please let me know.
>
> Thanks,
> --Teja
>
>
> _______________________________________________
> 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/20130225/328f0bf0/attachment.html>
More information about the llvm-dev
mailing list