|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释? g/ z6 F6 A0 n
我调试发现他是取得那个字段的地址。
5 K7 H$ h9 L& z5 r5 U I大侠能详细解释一下吗?
0 d: i8 T' x, J' y& U
" E( ~+ n$ K. c5 B这段是我Debug的用例。6 [1 r! G7 N0 A( E( V
' G6 V" q9 U) G: S! q: l#include "stdio.h"
6 ^; Q/ g" S! P#include "stdlib.h"
0 B+ a4 \1 l L4 o6 s# g0 z* z#include "string.h"( P* R' g: q$ I2 M3 }1 p
0 g3 k$ l* ]# n8 Q
#define CHAR8 unsigned char
' @7 N, U$ W, c3 P3 g% A
4 `/ K7 n2 W! Z$ g" t% W4 Z0 Qtypedef struct _tagjany
1 I0 M! z) ~$ A& W7 a3 @9 u3 c{
1 @8 A+ T4 f& K0 r" l } char name[8];
+ Z6 V) L. h. W$ V# u int age;
9 i2 \0 W/ B9 ]' ]& C9 S% O) V4 D}JANY, *PJANY;8 q" o% O) Y6 S5 G
1 G) z. `6 A7 p3 itypedef struct _tagowen8 O: _8 u9 h# ?* Q/ h
{
: w- L8 P; X) E. V JANY jy;: m# B/ ]6 h, R$ A; j7 E) R
char home[5];( i/ N' [1 S* p/ P* V. M, F
}OWEN, *POWEN;. e1 M- g' K% J5 {$ y4 r
' V+ f' N! u) P9 L5 D% W# @
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
1 u& ^9 f) I' r% u& ]8 R& h; w6 N
# V- l7 E4 t4 G5 Y( T0 M6 P' ~: |3 `#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))+ x C! y5 W' @ c& f7 s5 X* e
1 K9 t( t' h- T+ d5 R#define PEI_CR(Record, TYPE, Field, Signature) \; _, a1 z+ k6 `+ N& Z# y" K" H+ N
_CR(Record, TYPE, Field)
" f7 x e9 T* ]0 W! ] C" z( r! r5 w" c
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \8 x! P9 ]. C% h# ]
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
* Q+ Y2 n- c* }4 V! [' y# e5 ~
7 ^; b2 O6 H- a' ] [void main(); e A# m4 L6 ^- ]6 z& ?& W) R
{
3 I, ^+ |1 ? P" P- v% a/ P! d PJANY jany;3 ^3 v; W. V% \ S: k. I! ?! O" I
POWEN owen;1 [9 W' L/ a6 y1 O/ I* I, {4 E
jany = malloc(sizeof(JANY));0 h/ V/ i' S. k0 V6 O; a
owen = malloc(sizeof(OWEN));
3 @& M; B+ x F jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
. E3 R% `/ S9 g8 a7 }0 b free(owen);; p+ B! y* x! x+ l
free(jany);
; k1 p* H" I/ D return;
* B) U Y% ]+ a/ }3 J} |
|