|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?9 W1 u l" e; y U
我调试发现他是取得那个字段的地址。4 x9 k& S! [( w3 N
大侠能详细解释一下吗?! \) x# ]# v( G+ I+ p7 b
! i; G6 S, B( |) T* W n
这段是我Debug的用例。( d' W @# T0 B6 ]1 S! x
3 W1 M0 U* q) X' P) i#include "stdio.h". |+ u* M( s0 f# S0 h# I! F
#include "stdlib.h") d% S' W5 l: v* N* o& C, |
#include "string.h"1 o: V* y; U! K, n: J0 t; ?3 i9 X+ v
) \# M& W- f# J, j: n. [#define CHAR8 unsigned char; l2 D% f Q* I$ K9 x
+ {7 z7 r/ [1 b9 B$ ]
typedef struct _tagjany# z& D4 G( y! t: r Z9 f; e
{; E* f% a( R: J9 Q: H: |3 ?
char name[8];, ]4 J% O& r/ N. a& k, z9 A% o* m
int age;
; O! n* h7 O* J! V! A& r}JANY, *PJANY;
$ S) b O- c6 @# Q; o; ^, a' m& n1 T0 A5 I
typedef struct _tagowen+ i" J2 T6 \, X# h
{* l0 \8 A; O8 h" {) m$ t$ ^
JANY jy;
1 e: ~7 r2 W; K* o% ~" I char home[5];
! o: l% q j9 H) F( G% ^}OWEN, *POWEN;/ L6 l0 \6 l! `& J: w) M6 C
, d1 c4 ]! M+ K$ |#define PEI_CORE_HANDLE_SIGNATURE "owen.lu". }$ I$ @9 t2 W; |. s6 ?; x
4 L5 I. o, L3 E0 J: {7 f#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
B; M/ |& X2 H9 Q4 ]. X3 _5 k
) E4 v( v) d8 i% q' E: m7 w#define PEI_CR(Record, TYPE, Field, Signature) \( g& j" Y+ \' H3 ]8 K7 S1 {' c
_CR(Record, TYPE, Field) % }: k: C+ J2 t0 |" Z6 p# B7 `
1 H( t, I9 h* ?1 J/ f. C, E
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
6 x6 f0 k# H. ~1 I5 A6 v (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE)), j7 b9 M6 L# h. h, B- f: H
$ f6 l' `5 \- ]' {void main()8 {, o; l/ l9 e" H' S
{; M% Q$ R1 h# k) z. R+ M
PJANY jany;' G/ }! `9 \+ a. g! I$ y' }
POWEN owen;
2 v3 Q+ l) |" K8 {) ?8 ^ jany = malloc(sizeof(JANY));
' b. Y( W$ N9 H* F* Q1 T- { owen = malloc(sizeof(OWEN));
' ?) Q) K' a( L/ ] jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
! a1 x+ h) `( f% N9 b- {# V free(owen);
8 z5 x' L1 A) v free(jany); l O% ? x5 s% u$ F+ {" K: W* a
return;
! W; Y! ?# \8 H1 f4 E' U5 _. r} |
|