|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?8 T$ s. D0 c0 ~5 S2 ~* O& Z
我调试发现他是取得那个字段的地址。/ u( R; b. O8 L$ u Y
大侠能详细解释一下吗?
! @: w6 d6 H) h# f6 _: a: ?7 R: R5 A' H
这段是我Debug的用例。
: p1 U5 F7 @. v, m- k" W' l8 l3 V
4 f( i, |& l, K' a: c' ]2 D. ?#include "stdio.h"+ ?- A; e0 t. ^3 }: Q
#include "stdlib.h"
8 |1 O/ A( b) k6 q0 V/ C#include "string.h"4 A: Z& d& |6 @5 e% O; a7 }. J
9 T0 N) [+ v* |) y
#define CHAR8 unsigned char
. |& P* v5 K( H1 Y W6 G3 v( [; B+ I! f$ @! r* L! J% k! s; @
typedef struct _tagjany
/ s2 Y: C7 @' J9 A% I{* Q& C$ b# S4 w0 @9 b ]
char name[8];& B ]- \( e$ @$ m
int age;
2 ?: } G- G3 E8 X: l6 ^4 f}JANY, *PJANY;
/ |$ s7 ]2 S! y+ K0 w7 i5 w
; d5 R6 I! e0 P. p r- Htypedef struct _tagowen
3 I* W8 q$ s, M- Y; O8 C6 S; u{
6 |$ V0 c1 g8 a! I0 L JANY jy;
5 _; }: [( L5 D; \ char home[5];( }1 r4 h1 \) ~+ M+ R. H
}OWEN, *POWEN;
4 ^' T3 e4 k- i* m" O3 D0 B5 e! n& V3 ?# n
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
0 R$ `' g* M$ g+ A3 L1 G% Q* b% l8 ]2 E! }- R% p; g
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))9 g) P& Y! g) b5 S: |$ i; }
5 k0 n% t% i( [9 e
#define PEI_CR(Record, TYPE, Field, Signature) \3 R) w: h9 c$ P: v
_CR(Record, TYPE, Field) + d) Q2 E! E+ [; f+ w' I" `5 n
; ~& K+ k; v+ R* P/ [/ {
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
' \5 `( j$ A z+ E" U (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))' P4 |, j7 R' h9 L8 L
& v. u5 H* e% h" n) @: D# wvoid main()1 J7 L$ g5 n3 u) j' p) O+ D
{
5 Y. o4 `4 T+ Q PJANY jany;4 T! C/ z3 R6 T4 y w4 m7 t
POWEN owen;: U- n: G x; z
jany = malloc(sizeof(JANY));! Y6 k# h5 r9 d b. Y5 S8 W
owen = malloc(sizeof(OWEN));1 W+ [, e; G; }
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);( f( x n' g+ l- G; k5 T' Q
free(owen);
$ c0 S2 {8 v% W free(jany);
* M* {& S( j: S { return; ; q7 u. [- o6 h! q
} |
|