|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
2 F0 c, Z) q2 F+ q2 o我调试发现他是取得那个字段的地址。4 [/ v' t, ` M$ ~
大侠能详细解释一下吗?
+ ~0 A& T' b: a6 t+ g1 v/ I8 F9 w4 N: f# `% G1 @/ k% W
这段是我Debug的用例。
* d1 D% Y5 }( B; S' X, N! V9 S8 {
: q0 @9 ~ Z( t2 M( l" I: s#include "stdio.h"2 p1 P; k0 z4 W1 l
#include "stdlib.h"- `! q& ~) U; M7 I% O+ p% c
#include "string.h"
) f: i4 O6 r! Y6 @% F/ w9 o! N- m s% B2 ?5 p% J
#define CHAR8 unsigned char! i5 [5 b% z0 B
( @. N* O/ o& i! X1 _5 k4 Atypedef struct _tagjany
1 o' n; u8 y# v" Z& I1 y{; m5 H/ ]- z% ^/ Y0 F2 z
char name[8];
o# H* H9 {! f5 \5 t int age;: u) j6 j, Z5 o! t& K3 E
}JANY, *PJANY;) j6 `4 r7 E/ ?
* G/ a& `' z% t7 `- j0 w! [6 x) G
typedef struct _tagowen7 ^) o4 c3 v6 `! s) T
{& |! L7 ?1 b+ P$ M! b0 m+ x
JANY jy;
. c, ^3 `; y/ x) T i1 c( p# m4 F char home[5];
; b# J) T5 D! E$ {$ w5 w}OWEN, *POWEN;; e8 _3 k+ o+ {: b
1 J# U5 s- S9 e; O#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"/ {# q: P5 q r- O) \6 {' D( d
; ^3 e$ R% ^2 W# V$ a2 z" B
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
. _/ C/ o$ t9 s y! a) z( [0 J0 m, a' D
#define PEI_CR(Record, TYPE, Field, Signature) \
* d7 @0 ^7 L- r- h _CR(Record, TYPE, Field) . W9 p$ l8 b9 j/ z b. j
; ~$ t" o8 |% R& m3 Q; Q" C+ L# n
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \& Q! J8 a2 a* g) @) Z
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE)) F% [% j- z7 p1 h3 H
* h8 K6 ]* q% B# N8 [6 ]" y. Yvoid main()
2 D! g. M, K5 x6 m i{
6 G3 l( a0 _5 p, b9 k PJANY jany;3 y$ L% n* f& s+ ~9 T# l/ P
POWEN owen;
6 @ ]" h, W4 E8 y" c jany = malloc(sizeof(JANY));
- Q0 e [. b' l$ A% M owen = malloc(sizeof(OWEN));
% M/ i; T* `$ ?( k1 C$ s- s jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);( G& }4 c- w1 m2 O
free(owen);
2 g0 u2 ~+ I- P8 i1 |' V free(jany);
% Y# n; C" _! q7 C% I0 X return; 3 r4 t3 F# e% d* e- I
} |
|