|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?/ s2 u8 V- H, z7 D0 l; {$ I5 N
我调试发现他是取得那个字段的地址。: g% V7 A4 U2 ]& n$ ^6 M
大侠能详细解释一下吗?
$ p7 T6 p- K* j4 h6 ~" [: Q9 N7 w0 u) V7 s" O* R
这段是我Debug的用例。0 l1 e" Z4 ^0 C J4 f- l
3 M0 w: D) Z* |( H% ~0 ?" Y
#include "stdio.h"9 R8 V2 G" X8 R
#include "stdlib.h"
: J; r( R+ L/ k& @! A- O& i" c#include "string.h". m, Y# |6 f! t$ P% l- b
9 h f) ~% a( D$ M, ^
#define CHAR8 unsigned char4 Y& N# ? e' Y# F2 V$ H
) e7 m& B. `9 [
typedef struct _tagjany! i/ D1 A. {* b
{8 h: w0 C2 h3 J- A
char name[8];
Y T% v. f5 ^3 w" g5 G int age;3 f: H) `: F( W) F n0 u
}JANY, *PJANY;$ `2 O; @' Y7 _$ a0 ~2 Q" w! o
P7 N G5 q' M% s
typedef struct _tagowen
" e# Z! n" [' q3 {8 s/ X" w{' d: |2 K& e0 z5 U
JANY jy;1 O+ R6 R7 }7 Y8 p5 f+ U
char home[5];! N+ ]. U+ [6 A- Q/ L! n
}OWEN, *POWEN;) n( W( o: r# G. [/ P. R: `, ]
- l2 F% r; N6 O9 u6 ] [- a8 K8 M
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
7 ^, Z. H3 F' q# Z2 `$ b
7 z5 e+ Y; i% `% |#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
. m0 l; i8 X1 |; n# E# n' p! K$ n+ M, r0 n8 a0 X2 K2 l' j4 |
#define PEI_CR(Record, TYPE, Field, Signature) \
9 D& P) T: v- R+ r8 d _CR(Record, TYPE, Field) . V- d; K0 x/ u9 j! V! @
+ K( \8 n' u0 I* D c
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \2 ]2 D$ |9 U9 {; \2 F$ ]' L* D( k3 k' y
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
/ u2 ?: D" H8 ?* S/ g( F1 y# p$ ~ n: X; p$ U7 `
void main()0 M/ I. W! Z3 I0 ?& |: ^
{4 ]; b$ M: i( ]! @) ~3 c2 F* w2 M
PJANY jany;
9 z( l: V4 j8 p2 N P9 v2 v( f POWEN owen;/ Q6 _3 {* x1 B! q4 h' g
jany = malloc(sizeof(JANY));% ?" \6 N8 S- a5 Y1 D. c
owen = malloc(sizeof(OWEN));
1 y7 V* E2 N6 C- G% t jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);4 L+ d- _& o5 E
free(owen);+ V5 X! {% I1 f6 c
free(jany);
7 Q, [' H$ [8 { return; 4 O: U S0 s: P9 F1 o- _# `
} |
|