|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?5 N! _; k W3 z/ L7 o
我调试发现他是取得那个字段的地址。$ l! j# X f5 {6 n& ]0 K4 `0 m
大侠能详细解释一下吗?+ ^- u+ `/ `$ D: |# x8 H% r* G4 ~
9 u2 Y. j+ j6 p6 ?. C0 G9 Y/ V这段是我Debug的用例。; G% k2 o% ]7 J. z, c( k8 T0 m
4 G2 w r9 r ^3 u8 x" y# B7 @
#include "stdio.h"
6 o4 T( P6 A4 J% A% W {7 m+ {#include "stdlib.h"- X/ S$ y N% ]- D3 U
#include "string.h"5 y# W( Y" f6 \: H+ `& n! P# @* ?
3 z9 y2 y. H" h" c/ m6 A3 O#define CHAR8 unsigned char v9 q9 e) S6 J S) H) @" ?2 M
0 y% x. Y: t+ z; K" Y3 g- I- ^
typedef struct _tagjany
3 s0 f% I% ?3 D# }* A- |0 ]{
$ j- ~2 C* u, C& r. q# O5 l char name[8];
$ k* F/ \% V% C/ _ int age;
) o. R0 Z# {; V5 W) A}JANY, *PJANY;7 V5 v9 o7 ~& |4 ]( R! p
# f% z8 _: U# ^4 htypedef struct _tagowen: B, R) j1 M& p# U: k( O0 L
{) f, h* ^$ g0 l5 g y1 S
JANY jy;
5 b. L Z4 J9 ] char home[5];
% k, A1 _8 K8 n4 ]+ Y}OWEN, *POWEN;+ I% d Z" g) D! A# Z
( `- g! u( \" v7 D. @% N# f* I
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"4 U! T# F' ^" b3 Z3 a) G% `2 W5 q
7 P! A! o: Z9 ]$ P- ]#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))2 g( A K: L2 v5 n
' @$ ~2 j; f3 H4 I1 W
#define PEI_CR(Record, TYPE, Field, Signature) \7 x7 H9 K! e$ S8 M
_CR(Record, TYPE, Field) . `0 c, z8 S4 N
% P' f* A5 b% Q
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
6 ?' E, W) ~4 M+ m7 _ (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
& O7 `% r6 o$ f3 K# w& @* k( D$ x! v+ Z+ k8 C
void main()0 t( ]. E. s! T$ r+ Z7 Y
{
& a$ t' n+ h6 ^ PJANY jany;
$ E* l- @3 r8 n$ W T1 @2 A3 N POWEN owen;2 I; z% I c2 D! m, G4 P+ M
jany = malloc(sizeof(JANY));# ^3 \% m4 v3 ]' z: ]
owen = malloc(sizeof(OWEN));
- u5 j" U, E; C& O) Q6 {" R jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);: Y) n4 x; \2 Q6 B& U( M
free(owen);( E- Z3 P/ M0 z, y* I5 A! T0 @
free(jany); f7 p5 `' v* q
return; - x7 J5 i6 @" ~5 X
} |
|