|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?/ ^! W, O( \6 ^) k& L" K9 \
我调试发现他是取得那个字段的地址。
3 G; x; _0 W. I7 X: W6 J+ L6 x大侠能详细解释一下吗?& M, z+ |- S) @$ U7 o. M( i- W% F
; t& m3 E" J1 H- ]3 X这段是我Debug的用例。' E9 p+ j! _1 q7 Z7 Y* b$ H
$ r" p+ ^+ E& ]$ X# H# b
#include "stdio.h"
# M4 F- { O; i) o#include "stdlib.h"
/ A1 i* Q S' b: i4 b#include "string.h"
( I3 D9 L' G% l$ w+ {
! h1 t$ l: b# j2 P9 w% m#define CHAR8 unsigned char6 Y7 \0 o' \4 Y- P3 f* [) f+ F
6 D# L# S( S% K9 ^- Q
typedef struct _tagjany3 A. H* B$ |; T$ T5 R$ o
{8 Y" J- E8 F4 ]9 e$ b" J/ G
char name[8];
! W b) ?% r) m1 a/ `# Y% H; _ x int age;- ]2 s4 Z e* ]6 \6 B; z. R
}JANY, *PJANY;: b1 d' v0 t8 V" R" Y
3 h) o9 f/ y$ u% t7 D! Ctypedef struct _tagowen
$ b& R& w7 J! V{( Z# j! R7 t0 g& g2 k3 S B
JANY jy;, J' T2 g5 |9 H4 \
char home[5];
: Y3 l4 e8 K, M3 r5 a}OWEN, *POWEN;
' k. T p2 w( K N1 i! c. e
. ?2 ?( `/ H( `5 X" i7 f#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
+ {- q- M; @! t4 k) t0 K' J
+ w2 @ \( V" f+ `#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))/ b i" R7 ? u8 W
9 n' G, D6 m8 p% Q% c3 k#define PEI_CR(Record, TYPE, Field, Signature) \
0 h$ `0 }/ [9 I1 B0 e _CR(Record, TYPE, Field) : r q/ s5 ], p% P/ x( R! y' }+ q
- W! d. {& N& i5 J#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \) [( n. ^3 i7 M* I! z; s
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))9 z! B; P M9 ~! s7 \% Y
1 O Y+ l7 Z8 T U+ xvoid main()! \2 A+ z7 S4 F* q; v
{- j1 l% q* g$ D- ~8 D+ S
PJANY jany;# h) [7 A) C) ?5 H+ v5 m( p3 ~- B
POWEN owen;
" C/ H) B2 ?1 w) t* ~2 j! t jany = malloc(sizeof(JANY));4 E' N: X' _* Y! o; o
owen = malloc(sizeof(OWEN));9 [5 [# y9 I4 h
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
) X+ q# t. e# K: v( ], ` free(owen);
6 ]4 @4 O! X6 e0 t- D free(jany);
; ?! S$ q3 v. H& Z' |3 G return; - q' [6 O# f& W/ N! I, O9 G; g
} |
|