|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?% q& K( x: ~7 c: K; X
我调试发现他是取得那个字段的地址。
7 K5 [/ s0 h+ R! l% k大侠能详细解释一下吗?1 N! m' z- `& J+ M
2 p% K( S6 E# V) k5 Y" S这段是我Debug的用例。6 D* t$ e8 I! m' _9 G* A
* Q& S8 o% M; d' Q8 S#include "stdio.h"
4 l( w1 W3 \- q: E) Y5 _#include "stdlib.h"
9 k' O: Y0 G0 W! l#include "string.h"% M; J# d/ o$ m. N P6 n
- Y7 w! @$ A2 Y; k9 Q# x8 u' K#define CHAR8 unsigned char/ W6 O _# N4 X4 z0 i( M$ t/ Z" f
! Y+ _' P2 ^, d2 ]6 d) H0 t: o/ x
typedef struct _tagjany+ M$ ?# b* U/ k" s. E, C
{
% x! P* Z/ R( B5 h4 C+ a char name[8];
3 k2 D( I" Q% p7 M/ ^ }. N: V# y) t" d int age;5 |2 H- u% v+ u# M% c2 K k
}JANY, *PJANY;
+ I. N6 q i- _* Y" }1 s' `# z* k
typedef struct _tagowen$ L! ^( w3 n; x
{
. G; G& L/ `# `! i3 h8 t3 @ JANY jy;
3 h3 K5 [- o5 ?* ^: l2 s char home[5];
" _7 a7 w6 e+ X- Y4 [# F5 i( O}OWEN, *POWEN;( \7 ^- c! w0 [$ v% m
, x6 f9 P7 u7 i+ u L
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"$ a3 |; f8 N) D! G$ `) @
4 [6 X& b' Y. N" l* ^+ ~* |7 n
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))& q+ S0 |/ ?" G" r) i9 q
! X! c3 q5 t* J' {* T w#define PEI_CR(Record, TYPE, Field, Signature) \
% O, B3 s, A$ W9 w7 t& G( v% C _CR(Record, TYPE, Field)
) w2 h$ r6 P4 p6 v' ]6 G+ V
/ g# @7 A, ~* h$ I, ~ Q5 j#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \8 {$ d* F5 Y9 v( e
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE)): ]3 n+ ~6 B$ `( ~
( G! n( \# Q) |8 e; ]void main()
% i" D9 Z& R- ?7 e3 h{
, q* a- ^+ N+ j4 b9 D$ \) N PJANY jany;8 w) E, P; m1 A2 ?9 h* O( s
POWEN owen;! [. F5 b! ]( o
jany = malloc(sizeof(JANY));
+ M, F( a# m# w; @; N& \ owen = malloc(sizeof(OWEN));- q+ B+ z0 I; ~! Z- s: U
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);( o, Y3 v' G, t* D1 C) G y0 B
free(owen);/ \: |, X2 E( W5 s" D
free(jany);
4 `$ e" S4 G; e# \+ s3 ~6 K return; . _% T' q1 h9 S% d& T* Z
} |
|