|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
1 n( I0 b% Q2 g' H/ J. [我调试发现他是取得那个字段的地址。
5 l% ]; A; d. S' I9 Q# b, }: c: U大侠能详细解释一下吗?
9 C; J4 u$ V7 v
7 @) K) n: |5 o S, I这段是我Debug的用例。# p2 \2 v3 H3 N3 C+ W0 {
; ^2 Y0 [; e4 @, |! g#include "stdio.h"
; g* l9 N) w! Z+ G9 j#include "stdlib.h"9 @+ I" p: |! y0 y. Z/ [0 R
#include "string.h"
0 f8 }" ~4 N5 B$ t0 `% A! ~4 r& T' Z5 f. |4 }
#define CHAR8 unsigned char
/ N& @# ~% _0 a+ B2 [9 Q/ \& E0 C0 X- s$ ?" x
typedef struct _tagjany
1 s, {: Q7 o5 z1 F; u* x S{* j3 p+ p2 w! h! T; e
char name[8];4 K9 T/ m' U+ ?
int age;
; ~' U2 y& ?; c" I1 A3 d}JANY, *PJANY;
6 Y6 ^& [+ l/ I+ ~$ A( f+ q: w6 d6 A
3 r+ a- r/ m1 t8 j# A$ I5 Vtypedef struct _tagowen/ }# a( ~1 b4 O0 s* O' O4 t2 i/ K) y
{
$ [/ W& C) {$ s- ^" O8 Z6 l JANY jy;
. B2 \* F- {% D3 u1 H char home[5];
, B- M2 q+ z' N& R+ S}OWEN, *POWEN;
7 }+ l- G$ ?5 Q" r8 l, D0 E. [- i- ?; g" ^2 g0 Q
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"' T+ \6 |! C4 X+ H. B0 `
0 s7 e4 z7 n/ y; C& w* J
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))8 ~; R/ [3 K, d
; m$ B1 X8 w, X, y! ?( L#define PEI_CR(Record, TYPE, Field, Signature) \4 J( m0 g. K* G
_CR(Record, TYPE, Field) ) D7 q# r- C9 p4 u, e
r; B+ `6 u. A$ m
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
! e( | h. i9 c, X# e" V5 E8 C (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
+ t) g, U7 A5 ?/ w3 p) t4 }# g( c1 z3 ?: t
void main()8 g! T8 Z4 s( S+ f3 Y5 y, q7 T2 k
{; e" f* u' f! j- i, Y0 P3 P
PJANY jany;
$ g6 ]# v5 S# F7 K9 Y POWEN owen;
# [2 \ L# P5 [$ e jany = malloc(sizeof(JANY));9 b' y+ G! C2 b4 S. R) K4 d
owen = malloc(sizeof(OWEN));
3 J! i! g) R& W0 ^* O4 t jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
5 f3 v. I. E1 H" O# p free(owen);
3 _/ `6 V0 R4 l: n# R# `; H free(jany);
: _: @$ y8 z9 R7 U0 a return;
( m6 ^/ _& \; H1 S7 k X} |
|