|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?' ?9 L# {+ x \ k
我调试发现他是取得那个字段的地址。 _1 S4 `9 c+ B* J
大侠能详细解释一下吗?; G! }2 ?. q( o* }6 ]2 k
* ~2 f% e" H6 E' {" t这段是我Debug的用例。
& T1 e5 d: `; e' K: D* r: _' k0 ]) o: m2 ~
#include "stdio.h"8 f& h! ]: \& ]+ n8 |7 s4 m
#include "stdlib.h"7 M# e, L j5 z4 S2 }2 b
#include "string.h"
2 L! R. d/ R. ~3 T6 k5 C4 M8 ~! `! g" b4 v
#define CHAR8 unsigned char
- A+ E. i- c8 f. n5 B' |3 _5 u
! D. \% Y$ c" _typedef struct _tagjany3 o$ b* n* B0 ^
{
" T" E+ D( ^$ l0 g) i' M& J char name[8];& T5 q% e% ]& r5 a% z \# B- P
int age; r6 j; O+ }% e3 i
}JANY, *PJANY;" j8 L; b! q# ]. G t: D7 k
# F( q6 {$ P; t# Y9 q. ]typedef struct _tagowen3 s, V: V8 S0 h7 C
{
$ n& V( l; F+ |8 e) u9 T6 ? JANY jy;/ S; w# V% ~6 u
char home[5];/ x" {& f" c* m0 ~, I
}OWEN, *POWEN;3 u# X3 M( \7 L _2 G* b5 C
9 T" V! _# _8 F$ o/ R# U$ b#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"- G0 j! l3 ?! A/ e0 O: i8 Q: \
9 S( ]; {+ F2 u& R! z#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
: E% A- @; K+ H$ n: `+ A' D
' O h ~" G# r) @8 O5 y#define PEI_CR(Record, TYPE, Field, Signature) \8 ?- p" q. Z& d5 J( G
_CR(Record, TYPE, Field)
o+ F$ @" c' ~" @1 |' P9 a2 j* S7 G |- h( Y
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \# c2 l# S# Y2 I4 r; o. u* O
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))0 h4 t, }3 p# n& Q- `7 B S* U
9 ]; W( F y6 L* d
void main()
i( n. ^, X- f% K4 A0 v/ Y{
6 z* W, {" K$ b PJANY jany;
+ C3 q$ ^& U* H0 E8 M( M' E7 E POWEN owen;1 p# b' l3 F4 F& m9 X: W& {
jany = malloc(sizeof(JANY));5 |9 t# L) m! e9 h# j
owen = malloc(sizeof(OWEN));
+ c. c m: n8 ?6 ]$ f jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);. k& [- a4 A3 m' P5 J
free(owen);, u: `" I( N/ Y- `( D
free(jany);
6 t' _+ |* I; ~$ T$ { return; 3 e3 _% p4 J: c
} |
|