|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?, u* V. Y1 C% Q( U1 S4 G
我调试发现他是取得那个字段的地址。
6 ]- h" x, O( B& H大侠能详细解释一下吗?9 F6 y: k' R8 l0 i
9 R D) N+ e" E) h1 q% Q
这段是我Debug的用例。
3 J" `" q2 o/ N
$ W* y0 q( M3 B6 v#include "stdio.h"
( z% x1 y5 Q4 q: Y, V4 K4 @! x#include "stdlib.h"% B; l1 K" t! }: L+ V9 b
#include "string.h"7 \5 U: a0 H2 d
4 \2 O. w/ q5 G: ]#define CHAR8 unsigned char
2 Z+ A5 e& c0 N, }8 X2 V
/ S, c9 L: U3 _8 ]typedef struct _tagjany6 Z A( m4 w$ Z: P( P( I. O
{
* T2 f4 v/ i# F3 K char name[8];+ }: y; |6 W+ c+ e
int age;
* M; m2 V5 H1 l. I}JANY, *PJANY;, V6 \) j( Y( f: d3 L$ |
7 ~3 Y' r2 E( W0 q' P
typedef struct _tagowen; h2 t1 Z; f9 S3 X3 U3 k( {
{
2 K: c! ?" G8 o; d2 U JANY jy;
7 p4 W0 D5 h M! r4 x5 p: Q# g char home[5];
( c. X5 z7 A) o0 p, q9 C}OWEN, *POWEN;
' C# `1 w& f& c1 q' L+ e2 \5 ^
8 i) v# O, f+ d4 I, F0 x#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
' z7 i' ^) s: z- e3 `! Q; Y* ]9 e+ Z0 L# N1 ^% j% J0 X2 n: y
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))+ L; v0 c1 c1 B, @) x3 m
0 x( N. n% B- f' A. d
#define PEI_CR(Record, TYPE, Field, Signature) \+ U# q" K# B8 P) ?. ?
_CR(Record, TYPE, Field) + M' [" O# \0 Y+ M2 w+ A
1 o# X$ \/ w1 W1 Q
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \
0 }1 X9 x1 y* y% j% U8 q (PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))& ~* r, D' i/ C2 a. B
# a0 o9 F( O, Z- s# Y
void main()$ j. j* w G% i$ |" O. A: J
{/ R0 E/ q: b! S+ X
PJANY jany;
- W! ?' c. x, ] ?# c* v6 P POWEN owen;$ p; e" [% e B4 }8 Z1 H8 V* P- }
jany = malloc(sizeof(JANY));; g4 n$ _4 u8 D, P9 z4 a
owen = malloc(sizeof(OWEN));. `$ h5 ] m# ?) y$ _
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
" ]# r2 Y0 N# t# e free(owen);9 |4 f$ g+ G) S/ T; t
free(jany);, ~8 r# n/ G' Y0 |4 |- m
return;
: o; Y& L! u. p: y6 B* e) d6 e} |
|