Guest User

GetFontName

a guest
Mar 23rd, 2019
60
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         ; Количество записей
  2.         movzx   edx,word [ebx+TT_NAME_TABLE_HEADER.numberOfRecords]
  3.         xchg    dl,dh
  4.         movzx   eax,word [ebx+TT_NAME_TABLE_HEADER.stringOffset]
  5.         xchg    al,ah
  6.         lea     esi,[eax+ebx]
  7.  
  8.         ; Указатель на последнюю запись в списке
  9.         imul    eax,edx,sizeof.TT_NAME_RECORD
  10.         lea     ebx,[ebx+eax+sizeof.TT_NAME_TABLE_HEADER-sizeof.TT_NAME_RECORD]
  11. .loc_scan_name:
  12.         ; NameID должен быть Font Family - 1 (Big Endian)
  13.         cmp     word [ebx+TT_NAME_RECORD.nameID],0100h
  14.         jne     .loc_prev_name
  15.         ; Platform ID должен быть Microsoft - 3 (Big Endian)
  16.         cmp     word [ebx+TT_NAME_RECORD.platformID],0300h
  17.         jne     @f
  18.         ; с кодировкой Unicode - 1 или Symbol - 0
  19.         movzx   eax,word [ebx+TT_NAME_RECORD.encodingID]
  20.         xchg    al,ah
  21.         cmp     eax,1
  22.         jbe     .loc_string
  23.         jmp     .loc_prev_name
  24. @@:
  25.         ; или Macintosh - 1 (Big Endian)
  26.         cmp     word [ebx+TT_NAME_RECORD.platformID],0100h
  27.         jne     .loc_prev_name
  28.         ; с кодировкой Roman - 0
  29.         cmp     word [ebx+TT_NAME_RECORD.encodingID],0
  30.         je      .loc_string
  31.  
  32. .loc_prev_name:
  33.         sub     ebx,sizeof.TT_NAME_RECORD
  34.         dec     edx
  35.         jnz     .loc_scan_name
  36.         ; Название шрифта не найдено
  37.         jmp     .loc_done
  38.  
  39. .loc_string:
  40.         ; Длина строки
  41.         movzx   ecx,word [ebx+TT_NAME_RECORD.stringLength]
  42.         or      ecx,ecx
  43.         jz      .loc_prev_name
  44.         xchg    cl,ch
  45.  
  46.         ; Указатель на строку
  47.         movzx   eax,word [ebx+TT_NAME_RECORD.stringOffset]
  48.         xchg    al,ah
  49.         add     esi,eax
  50.  
  51.         mov     edi,font_name
  52.  
  53.         cmp     word [ebx+TT_NAME_RECORD.platformID],0300h
  54.         je      .loc_unicode_string
  55.  
  56. .loc_ascii_string:
  57.         ; Скопировать название шрифта в буфер
  58.         xor     eax,eax
  59. @@:
  60.         lodsb
  61.         stosw
  62.         loop    @b
  63.         jmp     .loc_terminate
  64.  
  65. .loc_unicode_string:
  66.         ; Скопировать название шрифта в буфер
  67.         shr     ecx,1
  68. @@:
  69.         lodsw
  70.         xchg    al,ah
  71.         stosw
  72.         loop    @b
  73.  
  74.         ; Завершающий ноль
  75. .loc_terminate:
  76.         xor     eax,eax
  77.         stosw
  78.  
  79. .loc_done:
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×