|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
3 ]( [: z8 R t* ~2 z我调试发现他是取得那个字段的地址。
; v0 f7 W% u1 u, {! E# K. I大侠能详细解释一下吗?" I) ^" ]; C7 B" [# w0 R* l7 w
2 \. i# h6 Y/ t' S ?这段是我Debug的用例。) P( B* P/ r/ R
; K1 \6 Z ]( o' ^3 X$ a8 i2 l5 z3 w$ `
#include "stdio.h"
* C/ e+ D% D( X; ~9 l#include "stdlib.h"$ m. ?1 M8 ]6 M$ e
#include "string.h"
6 P6 P; ?* F( P2 F ^2 b O- q4 l0 H% D, n4 l. A
#define CHAR8 unsigned char P9 J' {6 g* H# Q& w9 j
' i: x& p9 O4 O/ l1 ftypedef struct _tagjany; M3 d: C# ~/ A# _! q* R5 |
{; Q/ T% W/ N$ @- D+ _. B8 ]/ F$ q' o
char name[8];
: X. w/ O; d) O& S6 h6 j int age;. k5 N7 ~$ J& H
}JANY, *PJANY;* p2 ^. h1 F5 w# L
7 @- A; R# u+ ?2 r6 S7 ]
typedef struct _tagowen
( c7 ^* B& L2 a: a{
1 z7 L/ c- `. p' g z JANY jy;
3 |9 M U& p7 v! v1 L1 m1 C char home[5];
, k2 y3 c3 R4 }8 A* A$ }}OWEN, *POWEN;
9 W7 }. ~( I# U4 ?
7 H0 V$ c( I. H$ e6 Z) s5 f3 `* v1 G#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"+ {0 C3 f0 w' r) T
# M6 z" ?! Y* Z6 S. x: z [$ s
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))4 u" C% c1 \8 f. |2 Y8 l7 H# U
" X9 z* u6 x- L* i# n" n' R: c#define PEI_CR(Record, TYPE, Field, Signature) \5 s+ ` u' P1 B! f
_CR(Record, TYPE, Field) 8 J& N G9 K) t( g9 C2 k
1 y3 r5 j; h( {( q
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \( S* T! d# Q7 y
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
% L6 }3 ^& x. z7 @7 B$ m. t: L: D4 ~% N5 W' l
void main(), y/ r$ Q$ \: \
{
2 m2 j# [ m1 c PJANY jany;
v* m- A+ V+ Z1 c" f POWEN owen;
! I C$ {* n1 W: J, K- I- U0 [/ \- ` jany = malloc(sizeof(JANY));# v: a _: v4 t
owen = malloc(sizeof(OWEN));2 g( u: q( L$ Y, S$ Z0 [
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);$ |' f; W3 \9 X7 H$ |8 n4 J
free(owen);9 W. v1 t- |. {$ i, y$ k. v5 D
free(jany);' T, K$ C/ `8 {6 v3 V3 J
return;
" e9 X5 c; e1 u2 l! M, o$ i} |
|