|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?1 e+ H6 P2 _6 H- E5 R% B. ]
我调试发现他是取得那个字段的地址。
- i1 x: J9 u! V0 C7 j大侠能详细解释一下吗?
5 B6 ]3 D$ a' [: w$ T! |8 w0 R/ n8 @8 P
这段是我Debug的用例。/ S% m1 _8 O. a, T, y
- R8 ~1 W6 e: _7 Q: P#include "stdio.h": @3 v( M: R7 V/ F4 q" x3 \
#include "stdlib.h"$ r7 j. b9 J7 I, l: b# ]9 @- ~
#include "string.h"
- s' U, U7 u: J' B0 t; V$ X
1 o- o- ^2 ^* O' N+ v1 K% i( q#define CHAR8 unsigned char( R" ~# N' T* k6 A' C1 s/ z- J
3 x% C* n+ D( O/ l" Q! d L: m) ktypedef struct _tagjany
, {0 B3 T/ G+ j$ A6 k; D{
: p. M2 X1 S0 Z5 x. B" k1 ^; s( g char name[8];
4 s9 u$ C8 B$ d b int age;
" R- O" O# Y. z, Q; K7 X, b}JANY, *PJANY;; g F, A0 r9 j2 z: p8 o7 C
' i- u- C6 J1 M5 @4 N
typedef struct _tagowen3 f X4 O' L$ I% S$ _6 g: D- S. v/ F
{$ ?- o1 Z9 V/ r
JANY jy;
; l, r2 G/ m9 H) A9 G7 a" x* } char home[5];" Z( d {6 |0 g
}OWEN, *POWEN;' g0 ?8 [! U- n N3 Z; H4 l( L- U
' f, n; o+ Y- z9 `
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"8 o3 i P S* {, ]8 p1 j# X
& l) M3 W1 V a5 S- |8 [; q6 i% r
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
0 @) t5 J4 |" P4 d( @* [% W8 i1 j6 r5 s. ?6 B
#define PEI_CR(Record, TYPE, Field, Signature) \. K4 x" n0 E5 [( |- N l
_CR(Record, TYPE, Field)
% r3 s0 h( z. f, n* d
- l$ d1 z$ G8 B# D$ ?+ V#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
/ S+ a9 W& Q/ e' y" O3 v (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
# p( N* N' s) }; n% }+ p
5 R- p7 d- C3 V$ Y2 L/ Z+ Zvoid main()6 @3 p3 u* v# w. Y
{
U* M6 w9 t* M5 e$ b4 {" ] PJANY jany;
7 {4 U* E. A" n& o# {( H* m POWEN owen;
3 c( C5 \% t1 y( E0 P" u jany = malloc(sizeof(JANY));
# l; [5 @0 n) n4 k+ ]# w owen = malloc(sizeof(OWEN));
! ]. c$ s7 A& B; P; T jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
U: P( y( M8 D free(owen);5 {3 f* s, M3 M$ @7 w% ?
free(jany);- F& K5 X: Z( [
return; Z9 D' _9 }9 O6 P( D/ M& k
} |
|