|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?1 D- E1 X0 c' M/ w/ V/ Q
我调试发现他是取得那个字段的地址。
8 `! y+ s# J2 v' _* A r7 ^大侠能详细解释一下吗?3 b; u7 D$ x2 l) M
# J0 `- b% `$ s% p: g这段是我Debug的用例。4 h- p5 q, |2 M4 ~
+ y) g; I( M3 X) U) g/ p# a
#include "stdio.h". Q9 J6 B+ o8 @) g; h
#include "stdlib.h"0 o6 ?9 S& G7 Y. e. E
#include "string.h"3 s! A3 z5 p( s- B/ ^
! z: n' `' V4 Y3 O# |& z8 \
#define CHAR8 unsigned char
2 T) V7 Q7 ^4 C3 ]6 U/ i
. h! W/ B# Z3 F: R0 i$ Z" ltypedef struct _tagjany. N) s. f* A) s+ B9 m
{5 H) I F+ ^+ A# R y
char name[8];! D& _8 K5 B$ v- D( I
int age;
- b- x' Q- \7 {, ]* g) `}JANY, *PJANY;- W6 A! n* b" W: r4 Z, v6 Z, I
2 Q. }: n" L/ q$ _3 Ntypedef struct _tagowen
+ o: H1 o- {; b) [9 b- m{1 k7 J# N6 u w: q7 ~" Z( V
JANY jy;; t0 @) M' z/ b6 W# e; A0 }
char home[5];
8 n/ s" v; h& R" ^! S; w. l( _}OWEN, *POWEN;" Q4 s# i" g% [* T
' Z; _$ r e. S% c0 O
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
8 n, c( M, @7 K6 N" y7 E
, d/ S( g7 d! L#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
+ J: N! Q' A; `( P) l6 P" |, v
% I i/ A8 q& [3 d$ U. w8 g$ \#define PEI_CR(Record, TYPE, Field, Signature) \. P/ c6 j1 T, H% b" S
_CR(Record, TYPE, Field) ' C' \+ c, w+ w1 V4 P% y' |
6 H; L$ I1 e; J1 t6 \' M
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \. O) ?4 x4 P8 x
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
& }) x! H: a, ]4 N
; r$ U3 F/ l$ A+ nvoid main()
! q* E- T& [" W+ v0 L{
! Z, A/ m4 y. ~5 o+ h6 G3 E PJANY jany;
) \8 n$ E' ^+ Q) L. U/ x POWEN owen;; }: r S; j) X* Z5 _
jany = malloc(sizeof(JANY));
; d. P# I' k/ s owen = malloc(sizeof(OWEN));! F; a) Z7 b) e3 N/ a3 j1 \
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
" h& X( `9 x3 n3 `% L free(owen);
; g: f, P' l! }) ^) r3 u) | free(jany);2 s5 O+ D+ S6 U) M" w2 U
return;
. a1 h/ g Y9 E} |
|