|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
. v/ } I, ~9 {5 [ C K我调试发现他是取得那个字段的地址。3 ?) p% G: `& [5 l7 A; z7 a8 r5 H
大侠能详细解释一下吗?
& y0 @! m! v7 K% e- g# O2 R
& d$ Y/ Z1 ?+ Q* d: s( u. o这段是我Debug的用例。8 N8 V+ O3 n+ K+ ~0 H
" c* U* R, m7 K* [( _7 \#include "stdio.h"- L, W! i9 ~9 W5 m8 ~
#include "stdlib.h"! s7 m; J" D4 B
#include "string.h"2 y" ]7 H1 T) K, c8 O! l, a9 R
8 c8 T% W% `1 T5 V2 T2 C, ^7 _ Z! `) g& u
#define CHAR8 unsigned char; T) Q- w! ~4 T+ G: F9 k
s7 a- {, u" G* K8 p( ?
typedef struct _tagjany& n6 w- l# C" j+ c6 [( U/ l3 m
{5 ]- p6 s0 F: W6 j& k
char name[8];
! i0 Y6 ^- v" X7 m9 [' a) F int age;; ?1 V- Z* d8 d1 t# C
}JANY, *PJANY;
6 R" D/ f( ^& Y8 |: ~8 b: H
$ U- Z2 a9 L: D$ M9 Jtypedef struct _tagowen( ?$ T8 C9 J; { q# k2 V" {
{
& L; Q; E/ l3 j3 S JANY jy;
5 X6 |2 d& o" t s char home[5];8 x- C) d! [" i. [4 s
}OWEN, *POWEN;
2 Y( l8 L1 T* ~: d
5 ^0 ~, P) i( R3 ]3 x6 Y#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"! { ?- V. E$ I% v t+ G( i) {( ]; C
/ w, g, _3 ^4 {5 D/ s: o3 Z
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))0 m% Z1 h3 o1 H' K+ X' P/ I
: O0 D8 \% V7 t" A& [7 u0 _/ b
#define PEI_CR(Record, TYPE, Field, Signature) \
2 W0 E& I9 i5 j/ `# z2 X" Y _CR(Record, TYPE, Field) ' _" o. Z9 F1 @3 k! U
* t" z) Q9 ]+ ^; d
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \* D" Z' s8 A* ~0 {
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))! {( j+ b! c3 k3 F7 G- {
& }9 ]5 Q8 p& ]. N+ v+ I5 T2 ]) i0 ?void main()
! c4 _9 n3 ]8 c{7 e5 W( K! T9 Q( P: ^
PJANY jany;
9 J- ]' k8 \- l POWEN owen;
3 C8 ^! w$ M* Q. f) B7 N! d jany = malloc(sizeof(JANY));
n x5 x' |% Y* p owen = malloc(sizeof(OWEN));& }2 C- k5 h X! i
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);9 N5 H' R$ ^" b' ]9 C2 B
free(owen);
5 ?: H$ s; E! v5 S% x free(jany);
* }; e2 O( G" w2 Y return;
+ c* Q J. i* S! Q0 P} |
|