|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?2 f! g( }- I% \% X- _
我调试发现他是取得那个字段的地址。
9 l5 e5 _+ A0 Z3 j大侠能详细解释一下吗?
& Q3 U( ` ~' {$ |( l. L+ G5 j( g- l- G/ C: z9 u4 x, W4 D
这段是我Debug的用例。( z2 S) x2 S/ h2 W
7 t. v0 d" Y* K/ d% S# H#include "stdio.h"
7 D2 z0 ?! `! B5 m l3 k#include "stdlib.h"0 a# s9 s8 J! J* T
#include "string.h"
$ M; k4 o1 Y- o5 z1 Z/ T4 |& K
6 h5 Z; M3 B! A. L' p4 C V- J#define CHAR8 unsigned char
: `0 i I3 j! g; f' Z* X b4 _' F" S* [, K
typedef struct _tagjany
. I: ^! C5 l6 W; |! ?{5 R* L" \( Y3 y/ ~( ~1 j, q
char name[8];2 l/ y+ D. R; j' @
int age;
/ n0 L* @4 I- |' R}JANY, *PJANY;
% O! ?' i+ `/ o' G" D: M3 }' x0 Y3 I, j
typedef struct _tagowen
2 Y7 `% H5 p$ D2 [/ J{7 C* D, G$ U* D& Y2 u
JANY jy;
* C& b0 Y- _; q1 g9 H. g# s char home[5];
# k. z4 G U1 v/ P}OWEN, *POWEN;
6 A5 Y3 P7 i) n: ]9 e
, P( ]+ J5 M# a8 u#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"9 ]* [* e% n5 N2 |. U
7 W5 J* V& ?7 X- O
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
/ G8 v' Y7 c/ \4 [1 h N) q/ m
' o& Y! V' X f#define PEI_CR(Record, TYPE, Field, Signature) \
U. {/ Y1 X; Q% D+ Y" h _CR(Record, TYPE, Field)
, L5 E' i, K3 A
" n! X: j7 j3 d" V; b#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
, N/ Y4 n, Z' \, { (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))$ J2 O# m: U. m- L' p! f
- H7 K! S, P% Z' t& ~' y' j
void main()
w ?8 Q* G$ M$ E{5 m" x2 g) ]$ d/ _3 D
PJANY jany;/ ?; _6 |/ p8 Q4 a' U/ ]: t
POWEN owen;
% O" O! X# }. y9 [+ _+ f1 X jany = malloc(sizeof(JANY));
! v0 v8 ?4 L+ [) R owen = malloc(sizeof(OWEN));
+ h2 V0 X/ a4 R# M( g jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);% B0 `6 Z3 w; s+ @
free(owen);
& {/ S d: n# V/ l l) r& R" g( ? free(jany);' j, m/ j4 n4 V; a
return; ( C N. M: X- c
} |
|