|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?$ O+ S6 m/ Z8 Z. [' v
我调试发现他是取得那个字段的地址。
* T3 g0 }8 k1 g/ n大侠能详细解释一下吗?
6 _# f7 T; t( y/ i% W( e: t1 I% _ H/ T4 i6 ~9 d
这段是我Debug的用例。
1 N. J( o* f3 M0 ]: p/ x1 N1 ?6 P$ J) `8 J* A A
#include "stdio.h"; e6 U4 a$ ^5 B+ H
#include "stdlib.h"' V! R& C( b3 B2 U, M' I+ {
#include "string.h"
% Z$ R/ I- `* q! f
, Q* ~& L0 B9 I* ?#define CHAR8 unsigned char+ D0 [* }/ F( q0 N( d9 B% Y! Y
/ [0 ^' |) O! K1 S. z8 ttypedef struct _tagjany
" Q( P, G2 V9 Z- l. l{" M) N# R. v+ `# K) M7 g$ w
char name[8];
, _. G& j$ h L* _- Z! A$ e% a% J int age;
7 H* R$ n) X0 {}JANY, *PJANY;
# |1 {$ H& T1 J( K) }+ Q& Q
; H+ _7 D+ i- wtypedef struct _tagowen
7 H, i% H9 U) J/ f' i5 d{1 b! A. i8 U% m
JANY jy;
6 Z( A: V( R/ o char home[5];$ F0 v, y9 h; w9 n" j9 s, i; @
}OWEN, *POWEN;
" s3 `+ `6 }7 a
. C/ c1 W* m3 ~# q' H" o% L; ]#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
; c/ O6 H ^2 R; i
+ R) D2 W- g0 s% x' e#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
0 J @; C7 K f6 x
- \% `3 H+ p3 F9 E#define PEI_CR(Record, TYPE, Field, Signature) \
# w; S; B, {/ I; v# p3 K8 Z ] _CR(Record, TYPE, Field) & u2 S+ q% B; T0 K9 {! q
5 J$ U% J, d, Y8 J7 m+ ]+ w* x" O#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
5 x" K- p" J$ n, k, u1 F0 ~ (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
0 ^* O( J9 W, v, a& R9 n' J
/ p* t" R( t* }# S, vvoid main()4 z" g2 U6 n; m0 v( b6 F
{
1 `& {3 d7 m# C PJANY jany;
3 D$ w: }* Z: P/ y POWEN owen;
0 }8 d7 }) j9 }1 w5 G jany = malloc(sizeof(JANY));, d. t& \% u2 M- w a, w8 K
owen = malloc(sizeof(OWEN));
' o# ]8 O* q2 I# w, c jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);; m/ V. l1 C- w N" m
free(owen);; d/ P' Y3 r; w ~& a9 H! ^* {: y
free(jany);
3 q( W' w% F9 P7 q" B return;
b( u9 f6 J6 @6 O} |
|