|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?! {2 m$ W! s( A( S, r
我调试发现他是取得那个字段的地址。. E* E1 @, U! `: d
大侠能详细解释一下吗?2 c7 f2 A1 d* w& ]' D0 N
% w9 K' {( c& e0 x3 \: @; o) [ n
这段是我Debug的用例。
j+ G, N' `3 w1 v( [
- Q2 W/ w5 |' F0 H7 J0 D#include "stdio.h"
5 G+ A4 m% Q o#include "stdlib.h"
- @( k/ M; c+ G% v: z% x6 ]5 ?9 C#include "string.h"* X9 A0 _% E6 w
( V' Z( b w+ ^" d2 @#define CHAR8 unsigned char& H/ ^- O: O3 l7 |
8 W7 I2 @' a/ N/ ^2 ], q! n
typedef struct _tagjany3 H4 J, W) P- q' r; ]. ^) R
{8 [* H$ O/ q. ]* [8 U0 t
char name[8];. G: j# X; p1 u% d2 |
int age;: ~6 R* W' Z7 X' c- A
}JANY, *PJANY;
8 j+ P( _* @ r8 I6 W4 W8 A1 S+ u- _' _
1 v& }* M) k) Vtypedef struct _tagowen/ i" c# o3 Y6 g
{) j" L% `( m4 t( X& B, j
JANY jy;& T \7 [' H' E/ t% b" [
char home[5];+ ?) f$ {$ v6 m4 e9 W' l% s! Z
}OWEN, *POWEN;1 H% j& I' T) T; I
$ D8 J& \8 g! m2 g- o, ?#define PEI_CORE_HANDLE_SIGNATURE "owen.lu" ~/ [. Q, S2 V- m+ f8 G
7 d5 ^* n( E4 l7 f5 l+ e#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field))); M8 C. |: W3 g" f0 e9 r' K
) ^8 t. Z4 j1 b; {% }! _, {) c \#define PEI_CR(Record, TYPE, Field, Signature) \
8 u: G6 }( E" \* _ _CR(Record, TYPE, Field) 5 `7 j6 |, {$ c/ }3 T3 _) }
9 ]- H" R3 t! @5 o0 V#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
# s( ^: f p2 A% w6 l (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))0 l4 `1 T) c* `+ G6 B
4 l0 y2 H1 r6 t; p& c! F( c
void main()0 f6 C3 O, @; \' X0 r/ b& Q( H( X
{
- y9 c: [& I' k {: R PJANY jany;7 @5 M, a; A3 O
POWEN owen;: t9 j) K' F: j& A5 _
jany = malloc(sizeof(JANY));
( B: W- T' X* D' V) d* F owen = malloc(sizeof(OWEN));
* b/ c* k! P5 j: Q- i, a jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);1 ^* X8 g7 m( M. o9 k
free(owen);
4 t# [) h1 h/ F# D) D8 r free(jany);
; a+ Q+ R" X# K return; , u- z" g7 y5 z' u. l
} |
|