[Tutor] Get the structure values from a c file
Alan Gauld
alan.gauld at btinternet.com
Tue Dec 18 10:16:02 CET 2012
On 18/12/12 04:25, Marefe Serentas wrote:
> int some_data[] =
> {
> -288, -153, 31, 24, 205, 110, 39, 88,
> -281, 145, 35, 266, 63, -79, -103, -25,
> 53, 145, -114, -274, 46, 60, 220, 205
> };
>
> typedef struct MainStruct
> {
> A var1;
> u32 var2;
> u32 var3[max];
> u32 var4;
> u32 var5[max];
> }MainStruct;
>
> void generate()
> {
> MainStruct myMain = {0};
...
>
> (void)memcpy((void *)myMain.var4,
> (void *)some_data,
> sizeof(some_data));
Won't this probably crash? It's trying to copy a table of data into an
uninitialised pointer.
> This is a work-problem. Given a c file as input, the customer wants me
> to write a python script that will retrieve the values of myMain.
The values at what point in time? MyMain only exists for the lifetime of
the generate function. It gets thrown away.
> He wants those values converted to binary data and write it in a .bin
> file.
Is there a real purpose for this exercise? It sounds like somebody is
trying to do something in a very convoluted way that almost certainly
has a better solution. Parsing a C file to try and guess what its
internal data structures contain and write it to a file - so that some
other program can read it maybe? Do you even know what the machine
architecture and compiler are?
> myMain. The c file input content might change in the future like
> different values assigned, added fields in the MainStruct, etc. Also I
> am not permitted to change the c file.
That explains the desire to write a parser. But unless the changes to
the C file are very restricted it is a futile task. You would need to
build a full C language parser that exactly matches the C compiler
that's being used (presumably) to build the program to read the bin
file. And that's nearly impossible because C is not well defined, being
full of implementation specific details.
> About me, I'm a fresh graduate. I just started learning python a month
> ago. I learned c in school, we had it for 2 years.
>
> I'm using python 2.6. I'm running on Windows 7 64-bit OS.
> What I did so far is parse the C source code.
> But having a problem parsing the value of myMain.var4.
var4 will be a pointer which is an essentially random memory location.
I assume what you really want is the content that var4 points to, which
should be a copy of some_data.
If it weren't for the dynamic nature of the C file I'd still suggest
using your brain as parser and just writing out the *intended* data
using the struct module. But if its dynamic you will need to try to
parse it and hope nobody changes it too much.
Still sounds like the wrong design pattern to me!
C is a terrible data file format:-(
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
More information about the Tutor
mailing list