|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
( K! s. h5 J. c7 ]我调试发现他是取得那个字段的地址。! p* H& D! M% `7 u
大侠能详细解释一下吗?
, n- F" u. ?4 {' b$ F+ X0 W7 |, t0 C, R1 w; k4 y
这段是我Debug的用例。
' q% M* p5 n. o7 s9 o' F
" V) W; ^; [# H) T#include "stdio.h"( Z/ e' b c. |* T0 Q9 F+ N0 l
#include "stdlib.h"/ C Q; d/ k3 |+ p3 y
#include "string.h"
) ]9 k( `( R, J/ P1 g* ~7 z) q$ ~
9 }2 {9 U. |5 Z#define CHAR8 unsigned char
! @9 p- y! Y* b3 D7 y9 `7 p; E" y6 C; K, `) g1 u
typedef struct _tagjany
_& O0 z0 x$ O0 ^1 e3 |{
4 `9 p7 ^5 i: E, C) r+ s' k- B char name[8];
' |, t$ {' L. W int age;! J8 Q5 ?/ ?4 f: B0 D; [/ y$ x2 P
}JANY, *PJANY;
0 v& {9 b! j% ]( Z2 S* ?2 Q2 \6 l+ P! Y! L) y( L
typedef struct _tagowen
7 h2 L2 N0 n: Z3 y( R9 o$ a{1 B* v0 _6 w$ e; [) C+ M
JANY jy;: n* t% `2 \) H& r: Q
char home[5];
' \% C8 l# N* N& f. |4 \}OWEN, *POWEN;
" \+ W0 Z6 K+ j
9 v' i; R' L( r! z5 x#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"5 w- |3 E* |8 C6 S
- j% Z/ P( U, \: h+ _3 `8 |0 U/ _3 Z0 l#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
2 c- m7 T4 q0 c* ?" H
a) d5 r) [6 y: f; ?9 L$ ]9 N* @#define PEI_CR(Record, TYPE, Field, Signature) \
: f9 {" Y1 |! n+ k" ^" ` _CR(Record, TYPE, Field) 6 r W3 x. R& D9 Y! ~$ I X+ O
" l4 y$ q) }7 ^; }+ x#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
+ I) t# P; M0 F, P& N# }9 K" ^ (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))+ ?# [- |& q. B) o# p5 ?; G8 g8 s
8 x7 b8 U) S1 b( n, u
void main()$ ` p! C d# r# F$ a% t5 V
{
3 M3 }/ I; f% L4 f/ V$ i+ L PJANY jany;4 k2 M+ [( q! b' \# T5 Y
POWEN owen;
' t4 F8 W$ Z9 A" E7 q; q( m jany = malloc(sizeof(JANY));
& X9 a$ \$ C6 J* z, ] owen = malloc(sizeof(OWEN));
. l& D2 \2 K3 P w) @ jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
; R; `6 ~, e4 a5 O: s free(owen);2 |* d' N8 P6 ]* r' B5 Q, @
free(jany);
" R0 T+ _5 G1 O; P' A8 E' R return;
/ j$ x0 ]: r. h, S( G} |
|