|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
) W* ?) d- h6 Z" Q我调试发现他是取得那个字段的地址。- h* [- L9 j. I
大侠能详细解释一下吗?- v+ C D2 T% D5 X/ X% M( Y9 O
2 O. M0 s( _& }9 J
这段是我Debug的用例。
; U) A6 o8 v* x3 h+ w' v- c$ [9 \& x- B
#include "stdio.h", J% X0 p/ [, [1 w8 \8 X
#include "stdlib.h"
3 @5 ?( K. I/ O% z#include "string.h"( `2 ~! V- I6 p2 ^0 f
8 E' w) U7 D* V b; I& R7 P
#define CHAR8 unsigned char
; l( S0 w7 t9 {2 ?
* l, h! n% h1 j9 Rtypedef struct _tagjany
1 \/ g' [; f6 y1 h{# M; {0 o: J" r( G& g2 p7 x# U9 {
char name[8];( ^& |3 z7 S* C, m$ e
int age; y+ t% T. y1 @3 y2 C, }. X
}JANY, *PJANY;! r$ m4 ? w# t1 K: ?9 k
9 ^# D) z1 u$ y0 \typedef struct _tagowen
" h- X( A5 T1 l: ?" M: v# j3 w{
- V; g' y1 @3 _& w% c5 X/ w1 G JANY jy; k7 U% v; `7 x
char home[5];
6 V$ h" \6 D$ W, p% C5 e}OWEN, *POWEN;
]8 b) H% h V* Z, {" n% `( E" q; c/ t' N& [6 Y
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"
- K' E) N q- \; Y# X9 G a. | ^1 V7 y/ a, C' x1 N
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))2 K) p' y6 w. U3 B
! V8 C1 M0 M- Y; m7 C: ~#define PEI_CR(Record, TYPE, Field, Signature) \
" W6 {( {4 N- T1 R3 x _CR(Record, TYPE, Field)
' ~% ~- G# i$ X) J: D7 y( W( |9 A/ P5 d; M% h7 d
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \2 D2 u) H& l- M6 v. s
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
9 v9 T7 b" d" ]0 G+ y6 O- U4 |/ g' _" C) \7 F4 T* ^
void main()7 k: `# ?' ^( ~ t& I6 y
{2 X+ ]2 X" M Q6 c- i
PJANY jany;
5 `1 L0 @7 [) \, y POWEN owen;1 X, S' w6 t6 j5 |9 n- W
jany = malloc(sizeof(JANY));
; Y- t# N! O+ [9 G6 w6 a/ N owen = malloc(sizeof(OWEN));8 t* s! v# {! G, V
jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);% b6 o: {' D* R) n$ n0 s# x" Y) A
free(owen);+ x2 ^# C$ i+ Q/ I+ l! F
free(jany);
# Z, O9 m5 N9 w: J9 A+ R r/ m! L return; & d! Q3 w8 K$ | u) I
} |
|