From: Rekha B. <rba...@rc...> - 2008-12-01 21:19:11
|
Gabriel Kerneis wrote: > Hi, > > On Mon, Dec 01, 2008 at 02:22:46PM -0500, Rekha Bachwani wrote: > >> I am trying to print the values and types of the fields >> of a C struct. I use the below code (based on simplify.ml) >> to get the list of fields of a struct, but unable to get the actual >> values of the fields. Does somebody know how to get the >> actual values of the fields of a struct instance? >> > > The problem is you're inspecting the type. You can't get the values of a > specific instance that way, you have to look at the varinfo embodying the > instance you're interrested in. > > But you can't get the content of a structure statically, you need to execute > the program (in the general case). CIL being a static analysis tool, all you > can try is look for lvalues like (Var v, Field (f, NoOffset)) and infere some > properties. > > On the other hand, you can build C code which will output the content of a > specific instance *at runtime*. > > What are you trying to do exactly? > > Regards, > I am generating a call graph with the type and value info for all the arguments and return types. I have a C runtime along with a Cil module that works well for simple data types like int, char, etc. I want to extend it to support struct (and then arrays), and therefore wrote the above Cil code to get the type info and a new variable for every struct field. However, the values of the fields are not correct, even though a new variable for every field does get created. I believe the value of a struct's field is not getting into the new variables I create. I am lost because I don't know how to make the "new variables" take the actual values that are passed in the struct for each of the fields. Please let me know if this is not clear. thanks, Rekha |