|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?# K$ ^) G$ J! L$ n3 B( q8 H6 t
我调试发现他是取得那个字段的地址。
. e _7 Y! o0 T# V, I$ w! @大侠能详细解释一下吗?
* y5 i* ^1 N- ~
! z1 p ]8 Y3 _4 c, Q这段是我Debug的用例。4 m ^# Q' \5 M" Y( r) M7 r1 |5 t
4 V; T5 T( x2 A; O* o#include "stdio.h"
( w) I: S: Z0 C, U#include "stdlib.h"
, f( |3 ?* m, K#include "string.h"3 p* s+ \' }. u2 o" l
+ ]6 N6 j5 Y( l2 I2 P; l) P#define CHAR8 unsigned char
1 Z6 h6 E# _6 c# B* `" o, K, \) I) g/ R k* ~4 f$ U: [- `
typedef struct _tagjany
' B4 [. Y: y+ h+ I% c) O{
8 c% q) [, m4 N& B char name[8];
( a* g4 [ k W+ A# G int age;% R7 S6 v0 ^! h
}JANY, *PJANY;
# \4 v2 U3 d4 W$ w8 f9 q/ R1 T0 j
typedef struct _tagowen/ Q" y E0 a: e. i' C+ F# Y/ P
{# [1 E) g: H. Q1 q+ F2 O" b- \' S
JANY jy;
* q/ u# P; g q) j7 o char home[5];$ Q, A& O$ r& k$ d0 s! \" L8 {
}OWEN, *POWEN;
$ K% y) u f: F& @
% n1 m" W5 `: Y p; T4 Z: |#define PEI_CORE_HANDLE_SIGNATURE "owen.lu" o( n& ]. }8 b& t! X
, f% O: m: r8 G9 a4 I* e#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
6 n `9 C. a" f* W; n) C+ C' d4 I. q+ P% k% s% z
#define PEI_CR(Record, TYPE, Field, Signature) \* T. F/ b. u$ T( Q% K- |5 s
_CR(Record, TYPE, Field)
2 W9 {( E: H+ p0 K# W7 B+ s1 a& d2 T2 q! q- X
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
4 R8 l: k+ I1 z9 e (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))) f0 c: B# s3 ?5 r; J! a6 i$ [
9 w3 E# d/ [/ f0 r; D
void main()$ ^9 @2 W6 E( e3 X8 G) x5 k
{
' l6 A' Q" C1 p2 N PJANY jany;4 s/ K2 W- c4 A, b
POWEN owen;! G4 y5 N9 B" u2 |# k9 i& o! Z9 ?/ S ~
jany = malloc(sizeof(JANY));2 z+ O6 v- {9 g, w- _; Z
owen = malloc(sizeof(OWEN));
. i3 T& k/ _1 l( O# ^) W jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
, a. [* N- S1 f- p; R free(owen);
! h- y1 @7 v: x free(jany);( O9 w1 D0 e; n7 G
return;
. t1 @7 ^0 }$ j( l8 L# g' c} |
|