|
|
请做EFI的大侠&前辈指点一下,红色标记的那个宏怎么解释?
2 H# A5 }' Z6 B- Q- K- M9 }我调试发现他是取得那个字段的地址。
n7 J, {3 y2 G U# \4 g大侠能详细解释一下吗?
% g- m: e. }2 C9 _8 S' e( g: X
6 M1 k3 `% E4 K- ]4 q1 d这段是我Debug的用例。8 h+ n. K: ]+ S# m: J
/ p+ b0 N2 ^% n" b#include "stdio.h"+ Z! R+ U6 O) E' [, a8 Y" ~+ K
#include "stdlib.h", X: n$ H* K+ b
#include "string.h"8 u) ~. O/ ]' d* I0 `. G
0 i/ R7 w& t" k6 d% i j) k
#define CHAR8 unsigned char
: V% S" n# _1 P; r! E
1 ^1 n1 S! Q$ l3 A, H' W- i5 Dtypedef struct _tagjany/ ^( W- K0 Y6 M u$ i5 D
{ W) ~+ x% o) E4 l; [
char name[8];
9 y% i& z: e: j% C7 b, i1 { int age;
# D4 j6 e+ V2 c8 h- Y$ @7 {) N}JANY, *PJANY;# n2 S7 }% E9 t" l
3 @" s$ Z3 H" z( C, R6 x) e
typedef struct _tagowen& g' O1 w( B& ?* z W4 J/ O* E0 z1 w
{
/ w0 V* H2 W# i7 n, X e+ \ JANY jy;
# ]) |* s7 ?. n) c char home[5];
3 I, _1 |5 g, z}OWEN, *POWEN;
4 d O1 }7 d% M9 Q: J& W! V8 k2 H# K8 [
#define PEI_CORE_HANDLE_SIGNATURE "owen.lu"% P: J- ^( _: N; n& E/ ~
- u* H# g+ ^ k& s9 e D- e+ y
#define _CR(Record, TYPE, Field) ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
% w( q7 `8 ~* E
4 n" X& Q) G: z#define PEI_CR(Record, TYPE, Field, Signature) \
/ T# S* P# V# _* A* z/ F _CR(Record, TYPE, Field)
) g: r1 B3 `3 T4 }3 o1 @
1 D2 o- V3 i& h9 g1 o#define PEI_CORE_INSTANCE_FROM_PS_THIS(a) \0 {$ u7 z' }; `0 U# q
(PEI_CR(a, JANY, name, PEI_CORE_HANDLE_SIGNATURE))
8 b/ {$ c. u3 l" b( \
0 z) \& j6 T: R7 m7 Q( hvoid main()( @6 n/ x6 W C4 p4 j! G* t* q
{. d( c( H7 X0 X: L$ u8 ^
PJANY jany;
, z. ?. Y! j2 q0 D' N2 T POWEN owen;
; |8 ]+ R: n- D- ?3 o1 @ jany = malloc(sizeof(JANY));. e# H+ R9 M9 w! U7 y' a
owen = malloc(sizeof(OWEN));
$ D3 Z6 m/ s6 { Y1 E jany = PEI_CORE_INSTANCE_FROM_PS_THIS(owen);
+ U, }/ g7 }& K8 b free(owen);* _! R2 Y3 u E
free(jany);
" H: j& j. G# s$ Y6 R W return;
0 Q1 u6 Z( K7 m ]6 e- C% k M: l% ~0 X} |
|