|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
2 _# @& N/ x3 a! D; r, S我调试发现他是取得那个字段的地址。1 f8 O3 E% M+ y) s
大侠能详细解释一下吗?+ ?* F( R* Q( I3 P
7 K% S! |8 ?4 i' K这段是我Debug的用例。
' {1 s D3 Y1 r7 Y$ k7 x% ^; j+ F' e& x4 p! i7 E* c* N6 s2 C
#include "stdio.h"
2 h) n1 x; A( V, D' e#include "stdlib.h"; e! }( S( Y: M/ L
#include "string.h"
/ t; V9 Z( H$ t: [8 _6 W
" W5 O6 l4 L# a# q& o" `* Q#define CHAR8 unsigned char% A- z* |5 G$ y* x. f' L p) D
9 N8 _0 R4 D* {6 r. d
typedef struct _tagjany( s \6 c3 q6 q6 h8 S" J
{
( K$ Y+ M) w' v- G: b* s% t5 | char name[8];
7 G; P8 A" ]! h. f# w int age;2 d+ W, R* Q! T# W9 w& h
}JANY, *PJANY;
& M+ G( o9 a4 `2 ]0 v4 d
0 K' B* t. w) S$ C2 C1 C. Htypedef struct _tagowen4 N' V+ O* }9 Q( Y( V
{. h7 {5 J9 d5 V |6 b1 w6 `* H" n" h
JANY jy;
( f9 t( u5 P, r) V; C2 n: P char home[5];
: J$ R' [# V6 @6 W6 d}OWEN, *POWEN;4 c/ R# q# ]4 ?1 V
% ~! S1 @2 m9 I h#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"% I# {' W. d1 n. _7 x5 _
7 P) p7 B: S3 N& y# Z6 {
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))* a8 v+ l7 q: K5 G! f, q# O
6 [* ]+ Y" C2 I#define PEI_CR(Record, TYPE, Field, Signature) \
7 k: v' s0 H4 Z1 M% b' t7 c; [' u$ ` _CR(Record, TYPE, Field) % e$ k$ M$ ~$ T' ]
, ]4 a a9 M/ Z0 C3 M
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \/ r. l3 z7 E9 {* {) w$ E P( G
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
0 G9 D9 @) D: q4 j I9 v3 |6 |" d1 b) z0 T2 H. A8 q4 O: N$ [
void main()
) x. y. I2 Z9 V( v( X+ ~* L4 l* \{$ w" W; O' D. ~! n
PJANY jany;
3 \9 ^2 J1 p6 T y" i9 }. H, Y2 D POWEN owen;
5 d; X4 P0 M2 d+ y4 i jany = malloc(sizeof(JANY));
% q. _, S- ^3 }- ~ owen = malloc(sizeof(OWEN));
. e1 D5 ?3 N a5 Q9 ^: D$ b jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);6 C" e ?6 O( U
free(owen);
* j, }! G% D3 q$ @ free(jany);1 y; l3 C: x/ H f5 T1 {7 W
return;
/ Q% \! z" G3 e# K) t} |
|