|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
: Q( [' j( N+ ^# g& w2 ^我调试发现他是取得那个字段的地址。, Y& |' k; Y& F: @$ J5 R
大侠能详细解释一下吗?
4 a% _& ]; ]0 e
- h! L7 L0 H3 h9 A; \; X6 b" X这段是我Debug的用例。
; ]8 G. M& G- T: @
# x! U" n0 H, ]2 q7 J; y#include "stdio.h"- n0 S7 {+ ^% n1 X2 v( V, u% ?/ w( w
#include "stdlib.h"
* v9 I$ y" @- J#include "string.h") f6 S0 V" H% U: H W8 O7 L; Y
7 O2 l: x7 B$ M" `
#define CHAR8 unsigned char+ ?7 {' `) J3 b/ u
3 J# v7 @$ B* Z( ~$ d* G
typedef struct _tagjany& M1 P( K0 ~$ ]! h V, z
{
/ K' h, b" i) N. P char name[8];
( \9 R0 t3 b5 N# ^5 P int age;: I1 L# @& V% S
}JANY, *PJANY;9 E; j) X- O7 B* I0 N
( W5 q2 o1 n* R3 } m/ stypedef struct _tagowen
' b# [5 ~0 a3 F. P4 r) Q{
; V& X. @3 c# w* b% F1 P JANY jy;
7 K" ^7 b1 h u$ E: ]0 q char home[5];$ C' `0 V6 s5 p6 k2 W
}OWEN, *POWEN;
+ b* d+ e' _5 X/ b
0 F+ m3 j p+ c: U#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"/ T/ u% C P6 F7 Y* b. }
) G$ w5 h, f8 e
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
' K, }+ f( h" z2 Y/ c( `) i2 y
; A9 }; e, g, d#define PEI_CR(Record, TYPE, Field, Signature) \
2 C: ]! y( b& x/ K _CR(Record, TYPE, Field) , Q* H2 o2 ?$ ?1 J) A& I9 l0 }
4 m+ g1 O: F" c# p# {
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \' [, i7 n* D y* E5 N
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE)). {" }, V. |* ]9 _- ~# y1 p( q
+ n/ k# }5 J) w5 P+ P/ X/ u' Q! r# }- Wvoid main()
" X" [5 ^" |$ M9 K{7 B; l: T0 T( c9 T
PJANY jany;
6 f% K: j0 X9 B POWEN owen; u/ r" f% G1 n
jany = malloc(sizeof(JANY));; k3 {, I! U% ~; ]8 C2 K* q4 R
owen = malloc(sizeof(OWEN));
+ g. i( Y" Q8 b& ]% q jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
* X- P9 |4 ^# N, C8 x Y: q free(owen); V* o' z5 d, L7 |0 _
free(jany);
2 Q( o6 f: h& ~( ]8 \ return; $ Y" ^3 D# s, T9 a/ M/ R
} |
|