|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?6 N1 z D0 M1 A* q
我调试发现他是取得那个字段的地址。
' z- n+ u' C- X ~大侠能详细解释一下吗?
3 d+ R5 Z& k$ L% A
. B% F2 `# R! P9 i& V1 \+ z这段是我Debug的用例。
9 M0 Y. l+ _! v1 U& Y7 V3 ~' v& D
#include "stdio.h"( S y( N* D: f8 [
#include "stdlib.h"
% ~% C' h: U. u0 l#include "string.h"1 ]& K$ z4 T# g
' ~ ~1 S" e1 g# N! _5 a* p#define CHAR8 unsigned char" R4 V8 B7 ]6 Z; T0 o) p
" P, c- E5 w' r5 Q; {% ztypedef struct _tagjany
- _- Y( E. k3 f* v5 b{
7 c0 g% m, M- f1 }) O char name[8];* N: E1 E6 [& T. K
int age;" z! G3 G# U2 T4 o7 p
}JANY, *PJANY;
% A8 P9 f& c, r0 |- U- l0 s6 ^
, ~4 c* K9 m0 q! c& }typedef struct _tagowen0 V: g, [ k( j( ^9 m6 S) V* x- y
{
$ P# c9 v+ @1 W$ T5 ?( H. V JANY jy;; Y8 O1 {% T( E
char home[5]; @, p! U( X5 b
}OWEN, *POWEN;
( N+ |- L. h. i" @; {+ H
. S) ~2 L( i G! l; \( _#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"* F; f& v3 N( v6 F& Y! ~2 o S5 }
- P3 L2 _8 `, n#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
) l7 A, `7 H# x9 B! v1 y& @* I/ \$ r+ S% L
#define PEI_CR(Record, TYPE, Field, Signature) \. b( h, h d+ w) |- j) B0 s1 U
_CR(Record, TYPE, Field) # @% }0 i! v8 ]( I- d# X
. ^' K* w! W$ M4 v7 d, d2 f% e#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
1 P7 l; i" ~/ ~. v (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))5 S$ s- y# L" }0 M/ n! M& S
3 Z1 T, T; U! g4 @( R4 tvoid main()
9 \" m$ q3 N# Z{
+ h- J9 ^' V! S1 S8 h O PJANY jany;, p) j; `" L/ M# `
POWEN owen;
& l( @1 ]0 F. |& o9 Y I1 s5 Z jany = malloc(sizeof(JANY));
6 C9 h1 B/ P3 ? owen = malloc(sizeof(OWEN));
/ s1 N Y; w3 Z3 g0 @ jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);5 P; h8 v2 \- ?4 C
free(owen);
S: Q F0 k( F) X3 a free(jany);; ?1 f) R' N& g
return;
/ w0 u, t8 g% | ], n1 U} |
|