|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?; Q. p& \. ]! R4 @; Q
我调试发现他是取得那个字段的地址。# K& D+ \2 I! h; ?" P
大侠能详细解释一下吗?% h: a) K1 E1 n# I
8 w4 G7 Y% U6 @- s0 a2 K% u
这段是我Debug的用例。' Q4 Z/ C& ~- P% E( _- i j3 M
6 D# W( `9 w' Y6 }. `% L
#include "stdio.h"4 G% d6 w4 ^+ K- {
#include "stdlib.h"* A, @5 u* w* _4 ?. W
#include "string.h"
, c7 P4 K! l& u7 _' b& B4 `. q9 ]5 K8 O9 u
#define CHAR8 unsigned char
( }6 T1 t: I- A; }: ?- H* v0 T
+ L! _" y& r, @5 T7 t: _* U7 Xtypedef struct _tagjany/ g% |1 {; [" C7 R# b
{
* [' H7 l( X0 E' Q+ |# F char name[8];
% C1 C5 U0 M% y0 X7 ~# \ int age;
O9 g# w; ^5 Z# W4 a! K}JANY, *PJANY;) r8 g# h! r e
7 G- O# Z+ M; l2 f8 @
typedef struct _tagowen
7 R3 I8 n' ?$ D{
' q( B+ c+ l' [- L3 r6 P7 i; h1 H* A JANY jy;% E8 T- b! [ @! o
char home[5];/ {" _3 z7 v) x
}OWEN, *POWEN;
4 P( }7 a3 y5 g( P2 b- }
, |% \2 r) C# T$ h2 A#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"! m# l, k; K' B
4 U/ _- k2 H, z E#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))' K0 r' x1 A/ g- O# Y) t1 A
4 J. a( w; n' e3 [3 L#define PEI_CR(Record, TYPE, Field, Signature) \
. l/ }! _6 g6 f5 {- C* d; ?* C) o1 v _CR(Record, TYPE, Field) ) M5 t5 K9 N- Y# A
+ Q! g% O. W9 A#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \& {9 g: ?( y, S. T+ \& C
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
$ M( P: G$ D# |
* V1 W: D2 F" ]" I3 e' s' dvoid main(): L" p+ G h" w4 `4 k0 w+ e
{/ h0 O/ S$ ]7 A; K* `' U5 F& w
PJANY jany;7 T3 r5 {8 d$ Q/ q
POWEN owen;. ]7 [' V2 t, U3 P# B! @% u' H2 Q
jany = malloc(sizeof(JANY));
4 _0 w9 I' `+ Q! k; ~ owen = malloc(sizeof(OWEN));
. p" N* S8 ^ o% J1 V0 J jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
% \/ w& t- k2 r free(owen);
7 v. U3 y: @: K3 v- {& R free(jany);
, A- v$ r5 x; ]1 n* j% k7 C return;
5 R$ q3 f9 o, j4 I5 c p+ D} |
|