NULL Pointer (Code)

This is a Mac OS X / GDB counterpart to NULL Pointer (code) pattern previously described for Windows platforms (Volume 2, page 237):

(gdb) bt
#0 0×0000000000000000 in ?? ()
#1 0×000000010e8cce73 in bar (ps=0×7fff6e4cbac0)
#2 0×000000010e8cce95 in foo (ps=0×7fff6e4cbac0)
#3 0×000000010e8cced5 in main (argc=1, argv=0×7fff6e4cbb08)
(gdb) disass 0×000000010e8cce73-3 0×000000010e8cce73
Dump of assembler code from 0×10e8cce70 to 0×10e8cce73:
0×000000010e8cce70 : callq *0×8(%rdi)
End of assembler dump.
(gdb) info r rdi
rdi 0x7fff6e4cbac0 140735043910336


(gdb) x/2 0x7fff6e4cbac0
0x7fff6e4cbac0: 0x0000000a 0×00000000


(gdb) p/x *($rdi+8)
$7 = 0×0
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x000000010e8cce73 in bar (ps=0×7fff6e4cbac0)
#2 0×000000010e8cce95 in foo (ps=0×7fff6e4cbac0)
#3 0×000000010e8cced5 in main (argc=1, argv=0×7fff6e4cbb08)
(gdb) ptype MYSTRUCT
type = struct _MyStruct_tag {
int data;
PFUNC pfunc;
}


(gdb) print {MYSTRUCT}0×7fff6e4cbac0
$2 = {data = 10, pfunc = 0}

Here's the source code of the modeling application:

typedef void (*PFUNC)(void);

typedef struct _MyStruct_tag
{
int data;
PFUNC pfunc;
} MYSTRUCT;

void bar(MYSTRUCT *ps)
{
        ps->pfunc();
}

void foo(MYSTRUCT *ps)
{
        bar(ps);
}
int main(int argc, const char * argv[])
{
        MYSTRUCT pstruct = {10, NULL};

        foo(&pstruct);

        return 0;
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset