|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
8 U# l- b1 E' q% H- q9 M我调试发现他是取得那个字段的地址。! `9 _& M; C( E K$ \
大侠能详细解释一下吗?
9 ?' F8 `4 h. N
( h/ ^4 b- n# j5 M2 @ [! b( ]; x这段是我Debug的用例。
1 H. d5 ~7 q! ^/ X1 |0 F! N2 V( i |4 J: S" K+ }' j
#include "stdio.h"
; \. H- s0 J7 ]4 J2 N/ A0 W% f#include "stdlib.h"
. r. h$ k$ E3 w5 N# @- f#include "string.h"
/ ^1 B5 }$ \7 M. U* D! y# i) l" Y8 F2 h0 Y3 o E
#define CHAR8 unsigned char+ ^. P) I$ N6 R$ U; R8 E1 p5 e6 p
% t; g' `8 L. [9 h; rtypedef struct _tagjany
3 h M( ?8 Z0 H! a{
y1 Q5 c. I6 Y) d6 P) x7 l char name[8];
; ^ [1 q% J/ C7 e8 H, O int age;
& Z8 i g) J7 I9 {1 H ]}JANY, *PJANY;
8 T2 w0 E9 N$ d% x0 n& i8 E$ F1 g6 I# q+ @* j5 U8 ?* \
typedef struct _tagowen3 Y& V$ [1 k# {3 C' |) @
{8 C# a- s' ?( M9 D" g0 J7 H+ [9 v. [& F
JANY jy;! r$ H" |) L, I5 y& `: O+ e2 R
char home[5];! g9 T& h9 H3 N/ w
}OWEN, *POWEN;$ ?# W4 X$ Y3 c9 z0 v& l
) D5 N d+ \5 j# d# X! t) u
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
" O- W0 q& x' I0 a0 `: C
1 h7 {3 @9 `0 v1 L! N- c#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))( R2 _* W4 T6 S$ t- B" f
. V1 X# x0 }( ]2 b3 r* j
#define PEI_CR(Record, TYPE, Field, Signature) \
+ f/ @* ~9 v2 _# C. B4 s7 \ _CR(Record, TYPE, Field)
, E& c! G& W% V& m2 B6 r7 G: _
4 k# e7 Y4 f: i3 H#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
0 y. X% b4 m$ c9 d% i. a8 R (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))4 ?! d$ V' V! t
A& v9 j( t" ?
void main()
# t, Z' y" a8 v9 K{8 N( }* d; k9 e! @1 s, U. L& H- K
PJANY jany;
9 S: y( r+ w5 L POWEN owen;# ]8 @6 \7 ^- T2 @: g G
jany = malloc(sizeof(JANY));
2 ^. ^2 v4 m. Y5 C- {# D: R$ ]: K$ w owen = malloc(sizeof(OWEN));
. z2 b" _* [9 ~ Y& }$ R& L jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
# I# i' A* A/ u free(owen);1 ~- j( T: R; x( l5 I/ P3 t
free(jany);
3 O. L" m4 n; r+ a# j* W" _ return; 3 v, R" C8 Q, A
} |
|