|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
" i) c+ p3 M$ k" j+ w8 }' D我调试发现他是取得那个字段的地址。
8 e* H* f8 E1 Q% A大侠能详细解释一下吗?
: R: D7 X: J0 n4 g% I8 `- L
" `: P+ _+ O! ?; }这段是我Debug的用例。
# {0 f* ` `" f" C( a
- Q0 Z6 \1 P% y& W$ _#include "stdio.h"
0 i$ q/ b. H) `2 e! Y- M#include "stdlib.h"
7 c9 p' u5 K. H% ]0 U' z3 j9 j* F! b#include "string.h" u" R0 J) }' S/ s4 J3 |% |
}* ], ?* k. _ j+ t* F4 P+ V
#define CHAR8 unsigned char
/ b& H4 T2 @( @. q! u$ I3 k* O, l/ M: {- t( _# E
typedef struct _tagjany' N" _( O5 o, m' c: c
{
' `; h/ o% R% {& F0 X6 `5 | char name[8];7 B7 ?% N) ?' g1 n
int age;% a; [8 B2 e4 X4 z$ G U& t
}JANY, *PJANY;
0 L9 z1 T; B F- n7 s6 b
9 U' j0 x) i6 Z- h) l- u+ ~0 ztypedef struct _tagowen
$ X6 [# t3 Q0 @3 j5 U{
. z) X4 d1 u) {! w6 i/ F JANY jy;: Q% h; P7 T, i$ G/ B, t
char home[5];
8 A, n* C# v) d1 {/ q2 E' S. I( c$ C}OWEN, *POWEN;
% k) \! |6 P; @2 p
9 b% ^$ s5 }7 b* |#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
8 @; Z8 }" \5 ~& W) b2 i$ `/ c4 D/ T p/ t2 f1 F
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))4 D3 _7 o9 U. p9 a- F" R1 K
: X, t, A% M0 h, m. \7 O5 l; C" n" j$ R
#define PEI_CR(Record, TYPE, Field, Signature) \# Q! j- |. ]6 K% i& [, ]
_CR(Record, TYPE, Field) 8 ]& T& o8 o1 W6 ?1 C% N
* v: K) t3 C3 \# o6 {. d$ L, f
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \& i6 u( z. R' p9 I% m- R: K
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
. O T& ~+ P0 W# p4 {3 D$ Y; ~
void main()$ _! p- x- }9 r2 H$ I
{
& W+ E& c5 i" [; S7 ? PJANY jany;# J" W3 W8 z" v0 ^
POWEN owen;
/ Y; Z$ l8 h6 N6 |. [/ |7 i# W jany = malloc(sizeof(JANY));
' t& X" e# @8 }" B owen = malloc(sizeof(OWEN));* y: V1 o c* {5 O# S' }
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);) ^! ?, V+ Q) \3 w0 k
free(owen);3 X, \$ r1 { f. f6 Q1 i
free(jany);1 j9 D, |" N. W7 W ~3 b
return;
% s3 Z1 q6 k; F9 i* {} |
|