close

韓語翻譯

Struct 內的物件記憶體佈列如下 :

Status = AcpiMain(&RsdpPtr);

((EFI_MEMORY_POOLS_LISI *) 0) : 0

            ((TYPE *) ( (CHAR8 *)(Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))

  Status = LibGetSystemConfigurationTable (&gEfiAcpiTableGuid, TablePtr); // gEfiAcpi20TableGuid  "ACPI 2.0 Table"
  if (EFI_ERROR (Status)) {

拆解以後 Print 的了局 :

速記法 : 要點竄內容請傳址  (&Ptr)

            ((TYPE *) ( (CHAR8 *)(Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))

利用_CR 的體例 :

(CHAR8 *)(NowLink) : 6194C9C

_CR 會去計算出構造的起始位址,然後回傳回來

重點在於  &(((EFI_MEMORY_POOLS_LISI *) 0)->Link) 這個特別的用法

Entry {

Script = _CR(NowLink, EFI_MEMORY_POOLS_LISI, Link);

Entry {

}

}

  Status = EFI_SUCCESS;

 

...

EFI_STATUS
AcpiMain (
  IN OUT EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER **TablePtr
  )
{
  EFI_STATUS                 Status;

EFI_MEMORY_POOLS_LISI *Script;

 

}

 

利用雙指標的時機

替代後以下

  Status = LibGetSystemConfigurationTable (&gEfiAcpiTableGuid, &TablePtr); // gEfiAcpi20TableGuid  "ACPI 2.0 Table"
  if (EFI_ERROR (Status)) {

Status = AcpiMain(RsdpPtr);

&(((EFI_MEMORY_POOLS_LISI *) 0)->Link) : C

#define _CR(Record翻譯社 TYPE, Field) 

EFI_STATUS
AcpiMain (
  IN OUT EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *TablePtr
  )
{
  EFI_STATUS                 Status;

((EFI_MEMORY_POOLS_LISI *) ( (CHAR8 *)(NowLink) - (CHAR8 *) &(((EFI_MEMORY_POOLS_LISI *) 0)->Link)))

 

RsdpPtr 內容不會被改

接下來是重點

  ST->ConOut->SetAttribute(ST->ConOut,  EFI_BACKGROUND_BLACK | EFI_LIGHTGREEN );
  Print (L"ACPI Utility by Harry Lin %N");

文章標籤
c語言 efi _cr

Script = _CR(NowLink, EFI_MEMORY_POOLS_LISI翻譯社 Link);

(CHAR8 *) &(((EFI_MEMORY_POOLS_LISI *) 0)->Link) : C  => 注意他掏出 Link 的 Offset

Link       : 0x6194C9C

...

#define _CR(Record翻譯社 TYPE, Field) 

 

_CR tracing

  Status = EFI_SUCCESS;

Address : 0x6194C90

NowLink 是 萬國翻譯公司們要取的誰人構造內的Link 位址

EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER      *RsdpPtr;

ex:

...

首先先講Struct

 

 

Script    : 0x6194C90

 

好,那_CR 又是怎麼做的呢??

所以 NowLink 的位址減掉 Offset,就會是它的結構肇端點位址!!!

 

EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER      *RsdpPtr;

再來是 _CR(Record, TYPE翻譯社 Field) 

  ST->ConOut->SetAttribute(ST->ConOut,  EFI_BACKGROUND_BLACK | EFI_LIGHTGREEN );
  Print (L"ACPI Utility by Harry Lin %N");

}

typedef struct _EFI_MEMORY_POOLS_LISI
  EFI_PHYSICAL_ADDRESS              Address;
  UINTN                                         PoolSize;
  EFI_LIST_ENTRY                          Link;
} EFI_MEMORY_POOLS_LISI;

PoolSize : 0x6194C98

...

本來寫法,這一種方式不可!!

翻譯公司宣佈了一個指標,然後又call一個Function 去修改這個"指標內"的內容



以下文章來自: http://linch0520.pixnet.net/blog/post/53222884-%5bcode%5d-c%e8%aa%9e%e8%a8%80---%e9%9b%9c...-有關各國語文翻譯公證的問題歡迎諮詢萬國翻譯公司02-23690931
arrow
arrow
    文章標籤
    翻譯社
    全站熱搜
    創作者介紹
    創作者 ramiresj460 的頭像
    ramiresj460

    audreysuetim

    ramiresj460 發表在 痞客邦 留言(0) 人氣()