|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
: G; k/ W0 K$ ?$ Y% `4 s我调试发现他是取得那个字段的地址。
0 y9 s9 e0 b( V7 d大侠能详细解释一下吗?0 c: [$ m2 V/ z0 A* w8 w* ?; e$ Z8 C
# g4 V" Z" L" R! ]0 A2 l这段是我Debug的用例。* V2 R$ e+ E* B+ {5 e" T2 }5 Y
. b+ A" O! M6 M. ?4 t. q7 P
#include "stdio.h"" q" D' Z7 s) P" a) G
#include "stdlib.h"8 \) o3 A3 I% |
#include "string.h"
' S" }( ?8 p( R7 J
+ B) I% `2 }$ Z @$ P0 {#define CHAR8 unsigned char+ u+ H: C# B. K2 Q+ f
" z7 n2 D0 B8 H+ V6 |typedef struct _tagjany
* m% F& @9 S$ d5 z, G{. a7 M( Z) f4 I1 Z4 \4 z
char name[8];
; |2 g7 |) L* ?- Z3 E1 u! ^ int age;2 W0 ]' X2 J& a6 ?; S7 m
}JANY, *PJANY;3 r* f, q6 h ~5 ]3 J
! }6 G8 ~) p' t4 n6 ]0 n
typedef struct _tagowen
6 Z! a' E- J9 [3 y, E{
- W* P3 M# F; h0 ^ JANY jy;
W0 z5 K y' |/ E char home[5];
4 [( b0 k0 v) U% ^2 H}OWEN, *POWEN;: Q9 v! {/ l5 d6 d1 D4 }, F/ [; p# `
% C) ~" p L I# w#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"6 @ I$ e# L2 w3 D9 F, m7 g
" ?, ~( P+ N- w( F1 X3 Y4 E
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
P* q# |) H% @# c0 k* l6 m6 y. D% ?! {
#define PEI_CR(Record, TYPE, Field, Signature) \/ H. K# k: E# \( ]) m* V5 ]% J) h3 E
_CR(Record, TYPE, Field) 4 g9 k- b: N' Y6 g3 K
5 }$ r1 n: E) y#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \. p; f. t7 k2 p {& e5 A, n6 f
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))1 q5 }& l, Z. P9 ~1 w6 O
) L5 p4 n# y: v6 R3 ^; W
void main()0 x- A1 v/ U; f: Z: t
{
" n/ O: g1 K5 S; J. h; d$ c$ S: w! H# F4 x PJANY jany;
# f" b5 [2 _) k: f( ^' y. l& ? POWEN owen;8 H6 r: p0 _, f% i
jany = malloc(sizeof(JANY));
6 T. X6 o0 Q3 L owen = malloc(sizeof(OWEN));( _& H7 R; Q3 d& y+ t
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);) z4 \! x# \9 {6 b- A4 |1 E
free(owen);) i0 C$ c' k- j+ x4 t! G4 _6 a' ?( [
free(jany);
y" b- i5 _# _, b! } return; 7 e( x, O `( O* p1 H
} |
|