|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?4 a* _! ?8 b( n0 T2 ~6 _
我调试发现他是取得那个字段的地址。" U5 w% {4 \" ^( ` J0 j, w
大侠能详细解释一下吗?
0 m& \" J" c5 S; q. y" u9 k
6 b# m5 p+ z, S4 @. d0 n% C8 k7 S这段是我Debug的用例。
* W+ \- W) y$ h3 I: Q# L {; j8 a3 [: }+ B2 g1 w
#include "stdio.h"
- j8 m5 |; @8 k#include "stdlib.h"! ~. u3 g7 X" y |8 P$ F
#include "string.h"
i6 k3 I0 Q1 Z) o8 p% P- }/ C- Q j* e c0 x, p: f6 ?
#define CHAR8 unsigned char
: p; H% b) i! v# `
0 N P: `' Z8 {5 P# `1 h1 C/ Vtypedef struct _tagjany& \2 |4 u( U! O6 a
{2 [1 @" b4 q5 o' {$ ]
char name[8];) x% s R2 m" N) \( K# o _
int age;
3 Y9 J. t; S' Q$ N7 E) u}JANY, *PJANY;* h% L2 ?# a% f1 d& o$ w/ n2 q
# d( L# _ H3 W- Ytypedef struct _tagowen- p9 F! @7 c" y! U- {
{
0 o3 q' X& I% H7 ~6 e4 o JANY jy;8 r- }# s% C; `
char home[5];0 r; }- _( f+ \: A0 n
}OWEN, *POWEN;
5 T+ M8 m, h) W8 b1 k
" y% b, r5 `1 R$ ]#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
1 h2 d4 S7 W) G- N1 C
- }% M& C1 H# E#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
: {3 ` m. G' C, z3 a
" x: F: `& L6 g w3 h( n* y$ V#define PEI_CR(Record, TYPE, Field, Signature) \% x) p6 k$ E' v0 N3 d2 l) {7 z
_CR(Record, TYPE, Field)
: U9 ^8 K8 }/ D* j( h9 j1 g9 |# e8 b% R6 g5 [9 |6 c6 C5 r
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
- [9 F( x7 P4 ]) `. X) w7 n (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
) N8 t( ]5 T+ \8 T" z
* `4 Y7 s: R& Fvoid main()$ E6 ?. k% U, Y, f
{
* b I# v3 D9 g' R PJANY jany;
: w- d" |, U! A9 k% H8 J$ W POWEN owen;
' W6 O7 i$ v \! | jany = malloc(sizeof(JANY));, B0 o1 K3 \& k6 P0 A4 l& g
owen = malloc(sizeof(OWEN));
& k4 |% I; `5 {- s( U+ m# u jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
# y. }" r' }- W+ H" v free(owen);
7 ^1 g3 o3 E# V! U$ G0 ^$ Z free(jany);* f+ D( W" \9 D& F
return; : j9 s/ ?: F1 I1 e- W; K
} |
|