Coverage Report

Created: 2025-11-09 06:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/yara/libyara/modules/pe/pe_utils.c
Line
Count
Source
1
/*
2
Copyright (c) 2014-2015. The YARA Authors. All Rights Reserved.
3
4
Redistribution and use in source and binary forms, with or without modification,
5
are permitted provided that the following conditions are met:
6
7
1. Redistributions of source code must retain the above copyright notice, this
8
list of conditions and the following disclaimer.
9
10
2. Redistributions in binary form must reproduce the above copyright notice,
11
this list of conditions and the following disclaimer in the documentation and/or
12
other materials provided with the distribution.
13
14
3. Neither the name of the copyright holder nor the names of its contributors
15
may be used to endorse or promote products derived from this software without
16
specific prior written permission.
17
18
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
22
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
*/
29
30
#include <stdio.h>
31
#include <string.h>
32
#include <yara/dotnet.h>
33
#include <yara/endian.h>
34
#include <yara/integers.h>
35
#include <yara/mem.h>
36
#include <yara/pe.h>
37
#include <yara/pe_utils.h>
38
#include <yara/strutils.h>
39
#include <yara/utils.h>
40
41
PIMAGE_NT_HEADERS32 pe_get_header(const uint8_t* data, size_t data_size)
42
15.7k
{
43
15.7k
  PIMAGE_DOS_HEADER mz_header;
44
15.7k
  PIMAGE_NT_HEADERS32 pe_header;
45
46
15.7k
  size_t headers_size = 0;
47
48
15.7k
  if (data_size < sizeof(IMAGE_DOS_HEADER))
49
777
    return NULL;
50
51
15.0k
  mz_header = (PIMAGE_DOS_HEADER) data;
52
53
15.0k
  if (yr_le16toh(mz_header->e_magic) != IMAGE_DOS_SIGNATURE)
54
1.67k
    return NULL;
55
56
13.3k
  if (yr_le32toh(mz_header->e_lfanew) < 0)
57
66
    return NULL;
58
59
13.2k
  headers_size = yr_le32toh(mz_header->e_lfanew) +
60
13.2k
                 sizeof(pe_header->Signature) + sizeof(IMAGE_FILE_HEADER);
61
62
13.2k
  if (data_size < headers_size)
63
58
    return NULL;
64
65
13.2k
  pe_header = (PIMAGE_NT_HEADERS32) (data + yr_le32toh(mz_header->e_lfanew));
66
67
13.2k
  if (yr_le32toh(pe_header->Signature) != IMAGE_NT_SIGNATURE)
68
107
    return NULL;
69
70
13.1k
  if (data_size < headers_size + sizeof(IMAGE_OPTIONAL_HEADER32))
71
90
    return NULL;
72
73
13.0k
  if (pe_header->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
74
1.04k
    headers_size += sizeof(IMAGE_OPTIONAL_HEADER64);
75
11.9k
  else
76
11.9k
    headers_size += sizeof(IMAGE_OPTIONAL_HEADER32);
77
78
13.0k
  if (data_size < headers_size)
79
10
    return NULL;
80
81
13.0k
  return pe_header;
82
13.0k
}
83
84
PIMAGE_DATA_DIRECTORY pe_get_directory_entry(PE* pe, int entry)
85
47.3k
{
86
  // In theory, `entry` should be lower than NumberOfRvaAndSizes, however,
87
  // we don't enforce it because some PE files have a NumberOfRvaAndSizes
88
  // values lower than the actual number of directory entries. For example,
89
  // file 0aa527fd26c8e7fa7f3476b6d7eb8f22c071ff4c0fd3ed3797fa90ceb80f24ce
90
  // has NumberOfRvaAndSizes set to 0, but it actually has directory
91
  // entries. If we are overly strict here, and only parse entries which are
92
  // less than NumberOfRvaAndSizes, we run the risk of missing otherwise
93
  // perfectly valid files (valid in the sense that they can be parsed, even
94
  // if they are not valid for the Windows loader).
95
47.3k
  PIMAGE_DATA_DIRECTORY result = &OptionalHeader(pe, DataDirectory)[entry];
96
97
  // Check that directory is in file
98
47.3k
  if (!struct_fits_in_pe(pe, result, IMAGE_DATA_DIRECTORY))
99
0
    return NULL;
100
101
47.3k
  return result;
102
47.3k
}
103
104
int64_t pe_rva_to_offset(PE* pe, uint64_t rva)
105
122M
{
106
122M
  PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(pe->header);
107
108
122M
  DWORD lowest_section_rva = 0xffffffff;
109
122M
  DWORD section_rva = 0;
110
122M
  DWORD section_offset = 0;
111
122M
  DWORD section_raw_size = 0;
112
113
122M
  int64_t result;
114
115
122M
  int i = 0;
116
117
122M
  int alignment = 0;
118
122M
  int rest = 0;
119
120
249M
  while (i < yr_min(
121
122M
                 yr_le16toh(pe->header->FileHeader.NumberOfSections),
122
122M
                 MAX_PE_SECTIONS))
123
127M
  {
124
127M
    if (struct_fits_in_pe(pe, section, IMAGE_SECTION_HEADER))
125
127M
    {
126
127M
      if (lowest_section_rva > yr_le32toh(section->VirtualAddress))
127
106M
      {
128
106M
        lowest_section_rva = yr_le32toh(section->VirtualAddress);
129
106M
      }
130
131
      // In theory, we should use the section's virtual size while
132
      // checking if some RVA is within the section. In most cases
133
      // the virtual size is greater than the raw data size, but that's
134
      // not always the case. So we use the larger of the two values.
135
      //
136
      // Example:
137
      // db6a9934570fa98a93a979e7e0e218e0c9710e5a787b18c6948f2eedd9338984
138
127M
      uint32_t virtualSize = yr_max(
139
127M
          yr_le32toh(section->Misc.VirtualSize),
140
127M
          yr_le32toh(section->SizeOfRawData));
141
142
127M
      if (rva >= yr_le32toh(section->VirtualAddress) &&
143
71.2M
          rva - yr_le32toh(section->VirtualAddress) < virtualSize &&
144
11.9M
          section_rva <= yr_le32toh(section->VirtualAddress))
145
9.85M
      {
146
        // Round section_offset
147
        //
148
        // Rounding everything less than 0x200 to 0 as discussed in
149
        // https://code.google.com/archive/p/corkami/wikis/PE.wiki#PointerToRawData
150
        // does not work for PE32_FILE from the test suite and for
151
        // some tinype samples where File Alignment = 4
152
        // (http://www.phreedom.org/research/tinype/).
153
        //
154
        // If FileAlignment is >= 0x200, it is apparently ignored (see
155
        // Ero Carreras's pefile.py, PE.adjust_FileAlignment).
156
157
9.85M
        alignment = yr_min(
158
9.85M
            yr_le32toh(OptionalHeader(pe, FileAlignment)), 0x200);
159
160
9.85M
        section_rva = yr_le32toh(section->VirtualAddress);
161
9.85M
        section_offset = yr_le32toh(section->PointerToRawData);
162
9.85M
        section_raw_size = yr_le32toh(section->SizeOfRawData);
163
164
9.85M
        if (alignment)
165
4.62M
        {
166
4.62M
          rest = section_offset % alignment;
167
168
4.62M
          if (rest)
169
3.97M
            section_offset -= rest;
170
4.62M
        }
171
172
        // For multi-section images, real pointer to raw data is aligned down to
173
        // sector size
174
9.85M
        if (yr_le32toh(OptionalHeader(pe, SectionAlignment)) >= PE_PAGE_SIZE)
175
8.16M
          section_offset = section_offset & ~(PE_SECTOR_SIZE - 1);
176
9.85M
      }
177
178
127M
      section++;
179
127M
      i++;
180
127M
    }
181
1.91k
    else
182
1.91k
    {
183
1.91k
      return -1;
184
1.91k
    }
185
127M
  }
186
187
  // Everything before the first section seems to get mapped straight
188
  // relative to ImageBase.
189
190
122M
  if (rva < lowest_section_rva)
191
62.7M
  {
192
62.7M
    section_rva = 0;
193
62.7M
    section_offset = 0;
194
62.7M
    section_raw_size = (DWORD) pe->data_size;
195
62.7M
  }
196
197
  // Many sections, have a raw (on disk) size smaller than their in-memory size.
198
  // Check for rva's that map to this sparse space, and therefore have no valid
199
  // associated file offset.
200
201
122M
  if ((rva - section_rva) >= section_raw_size)
202
69.2M
    return -1;
203
204
53.0M
  result = section_offset + (rva - section_rva);
205
206
  // Check that the offset fits within the file.
207
53.0M
  if (result >= pe->data_size)
208
1.02M
    return -1;
209
210
52.0M
  return result;
211
53.0M
}
212
213
#if !HAVE_TIMEGM
214
#if HAVE__MKGMTIME
215
#define timegm _mkgmtime
216
#else
217
218
#include <time.h>
219
220
static bool is_leap(unsigned int year)
221
{
222
  year += 1900;
223
  return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0);
224
}
225
226
time_t timegm(struct tm* tm)
227
{
228
  static const unsigned ndays[2][12] = {
229
      {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
230
      {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
231
232
  time_t res = 0;
233
  int i;
234
235
  for (i = 70; i < tm->tm_year; ++i) res += is_leap(i) ? 366 : 365;
236
237
  for (i = 0; i < tm->tm_mon; ++i) res += ndays[is_leap(tm->tm_year)][i];
238
239
  res += tm->tm_mday - 1;
240
  res *= 24;
241
  res += tm->tm_hour;
242
  res *= 60;
243
  res += tm->tm_min;
244
  res *= 60;
245
  res += tm->tm_sec;
246
247
  return res;
248
}
249
250
#endif  // HAVE__MKGMTIME
251
#endif  // !HAVE_TIMEGM
252
253
// These ordinals are taken from pefile. If a lookup fails attempt to return
254
// "ordN" and if that fails, return NULL. The caller is responsible for freeing
255
// the returned string.
256
257
char* ord_lookup(char* dll, uint16_t ord)
258
6.81M
{
259
6.81M
  char name[64];
260
6.81M
  name[0] = '\0';
261
262
6.81M
  if (strncasecmp(dll, "WS2_32.dll", 10) == 0 ||
263
5.00M
      strncasecmp(dll, "wsock32.dll", 11) == 0)
264
1.86M
  {
265
1.86M
    switch (ord)
266
1.86M
    {
267
13.3k
    case 1:
268
13.3k
      sprintf(name, "accept");
269
13.3k
      break;
270
3.47k
    case 2:
271
3.47k
      sprintf(name, "bind");
272
3.47k
      break;
273
2.70k
    case 3:
274
2.70k
      sprintf(name, "closesocket");
275
2.70k
      break;
276
1.26k
    case 4:
277
1.26k
      sprintf(name, "connect");
278
1.26k
      break;
279
3.21k
    case 5:
280
3.21k
      sprintf(name, "getpeername");
281
3.21k
      break;
282
713
    case 6:
283
713
      sprintf(name, "getsockname");
284
713
      break;
285
2.21k
    case 7:
286
2.21k
      sprintf(name, "getsockopt");
287
2.21k
      break;
288
2.74k
    case 8:
289
2.74k
      sprintf(name, "htonl");
290
2.74k
      break;
291
1.58k
    case 9:
292
1.58k
      sprintf(name, "htons");
293
1.58k
      break;
294
649
    case 10:
295
649
      sprintf(name, "ioctlsocket");
296
649
      break;
297
882
    case 11:
298
882
      sprintf(name, "inet_addr");
299
882
      break;
300
411
    case 12:
301
411
      sprintf(name, "inet_ntoa");
302
411
      break;
303
624
    case 13:
304
624
      sprintf(name, "listen");
305
624
      break;
306
1.11k
    case 14:
307
1.11k
      sprintf(name, "ntohl");
308
1.11k
      break;
309
525
    case 15:
310
525
      sprintf(name, "ntohs");
311
525
      break;
312
7.87k
    case 16:
313
7.87k
      sprintf(name, "recv");
314
7.87k
      break;
315
1.45k
    case 17:
316
1.45k
      sprintf(name, "recvfrom");
317
1.45k
      break;
318
420
    case 18:
319
420
      sprintf(name, "select");
320
420
      break;
321
355
    case 19:
322
355
      sprintf(name, "send");
323
355
      break;
324
2.05k
    case 20:
325
2.05k
      sprintf(name, "sendto");
326
2.05k
      break;
327
25.6k
    case 21:
328
25.6k
      sprintf(name, "setsockopt");
329
25.6k
      break;
330
253
    case 22:
331
253
      sprintf(name, "shutdown");
332
253
      break;
333
944
    case 23:
334
944
      sprintf(name, "socket");
335
944
      break;
336
1.99k
    case 24:
337
1.99k
      sprintf(name, "GetAddrInfoW");
338
1.99k
      break;
339
1.19k
    case 25:
340
1.19k
      sprintf(name, "GetNameInfoW");
341
1.19k
      break;
342
379
    case 26:
343
379
      sprintf(name, "WSApSetPostRoutine");
344
379
      break;
345
470
    case 27:
346
470
      sprintf(name, "FreeAddrInfoW");
347
470
      break;
348
2.93k
    case 28:
349
2.93k
      sprintf(name, "WPUCompleteOverlappedRequest");
350
2.93k
      break;
351
2.18k
    case 29:
352
2.18k
      sprintf(name, "WSAAccept");
353
2.18k
      break;
354
215
    case 30:
355
215
      sprintf(name, "WSAAddressToStringA");
356
215
      break;
357
577
    case 31:
358
577
      sprintf(name, "WSAAddressToStringW");
359
577
      break;
360
1.72k
    case 32:
361
1.72k
      sprintf(name, "WSACloseEvent");
362
1.72k
      break;
363
996
    case 33:
364
996
      sprintf(name, "WSAConnect");
365
996
      break;
366
14.1k
    case 34:
367
14.1k
      sprintf(name, "WSACreateEvent");
368
14.1k
      break;
369
524
    case 35:
370
524
      sprintf(name, "WSADuplicateSocketA");
371
524
      break;
372
768
    case 36:
373
768
      sprintf(name, "WSADuplicateSocketW");
374
768
      break;
375
1.04k
    case 37:
376
1.04k
      sprintf(name, "WSAEnumNameSpaceProvidersA");
377
1.04k
      break;
378
868
    case 38:
379
868
      sprintf(name, "WSAEnumNameSpaceProvidersW");
380
868
      break;
381
903
    case 39:
382
903
      sprintf(name, "WSAEnumNetworkEvents");
383
903
      break;
384
2.38k
    case 40:
385
2.38k
      sprintf(name, "WSAEnumProtocolsA");
386
2.38k
      break;
387
554
    case 41:
388
554
      sprintf(name, "WSAEnumProtocolsW");
389
554
      break;
390
1.15k
    case 42:
391
1.15k
      sprintf(name, "WSAEventSelect");
392
1.15k
      break;
393
597
    case 43:
394
597
      sprintf(name, "WSAGetOverlappedResult");
395
597
      break;
396
709
    case 44:
397
709
      sprintf(name, "WSAGetQOSByName");
398
709
      break;
399
820
    case 45:
400
820
      sprintf(name, "WSAGetServiceClassInfoA");
401
820
      break;
402
761
    case 46:
403
761
      sprintf(name, "WSAGetServiceClassInfoW");
404
761
      break;
405
861
    case 47:
406
861
      sprintf(name, "WSAGetServiceClassNameByClassIdA");
407
861
      break;
408
2.35k
    case 48:
409
2.35k
      sprintf(name, "WSAGetServiceClassNameByClassIdW");
410
2.35k
      break;
411
1.11k
    case 49:
412
1.11k
      sprintf(name, "WSAHtonl");
413
1.11k
      break;
414
2.12k
    case 50:
415
2.12k
      sprintf(name, "WSAHtons");
416
2.12k
      break;
417
861
    case 51:
418
861
      sprintf(name, "gethostbyaddr");
419
861
      break;
420
779
    case 52:
421
779
      sprintf(name, "gethostbyname");
422
779
      break;
423
454
    case 53:
424
454
      sprintf(name, "getprotobyname");
425
454
      break;
426
762
    case 54:
427
762
      sprintf(name, "getprotobynumber");
428
762
      break;
429
519
    case 55:
430
519
      sprintf(name, "getservbyname");
431
519
      break;
432
883
    case 56:
433
883
      sprintf(name, "getservbyport");
434
883
      break;
435
519
    case 57:
436
519
      sprintf(name, "gethostname");
437
519
      break;
438
1.05k
    case 58:
439
1.05k
      sprintf(name, "WSAInstallServiceClassA");
440
1.05k
      break;
441
1.13k
    case 59:
442
1.13k
      sprintf(name, "WSAInstallServiceClassW");
443
1.13k
      break;
444
1.01k
    case 60:
445
1.01k
      sprintf(name, "WSAIoctl");
446
1.01k
      break;
447
745
    case 61:
448
745
      sprintf(name, "WSAJoinLeaf");
449
745
      break;
450
544
    case 62:
451
544
      sprintf(name, "WSALookupServiceBeginA");
452
544
      break;
453
475
    case 63:
454
475
      sprintf(name, "WSALookupServiceBeginW");
455
475
      break;
456
801
    case 64:
457
801
      sprintf(name, "WSALookupServiceEnd");
458
801
      break;
459
598
    case 65:
460
598
      sprintf(name, "WSALookupServiceNextA");
461
598
      break;
462
741
    case 66:
463
741
      sprintf(name, "WSALookupServiceNextW");
464
741
      break;
465
637
    case 67:
466
637
      sprintf(name, "WSANSPIoctl");
467
637
      break;
468
1.55k
    case 68:
469
1.55k
      sprintf(name, "WSANtohl");
470
1.55k
      break;
471
3.01k
    case 69:
472
3.01k
      sprintf(name, "WSANtohs");
473
3.01k
      break;
474
3.21k
    case 70:
475
3.21k
      sprintf(name, "WSAProviderConfigChange");
476
3.21k
      break;
477
748
    case 71:
478
748
      sprintf(name, "WSARecv");
479
748
      break;
480
571
    case 72:
481
571
      sprintf(name, "WSARecvDisconnect");
482
571
      break;
483
288
    case 73:
484
288
      sprintf(name, "WSARecvFrom");
485
288
      break;
486
278
    case 74:
487
278
      sprintf(name, "WSARemoveServiceClass");
488
278
      break;
489
504
    case 75:
490
504
      sprintf(name, "WSAResetEvent");
491
504
      break;
492
846
    case 76:
493
846
      sprintf(name, "WSASend");
494
846
      break;
495
1.98k
    case 77:
496
1.98k
      sprintf(name, "WSASendDisconnect");
497
1.98k
      break;
498
768
    case 78:
499
768
      sprintf(name, "WSASendTo");
500
768
      break;
501
443
    case 79:
502
443
      sprintf(name, "WSASetEvent");
503
443
      break;
504
806
    case 80:
505
806
      sprintf(name, "WSASetServiceA");
506
806
      break;
507
1.32k
    case 81:
508
1.32k
      sprintf(name, "WSASetServiceW");
509
1.32k
      break;
510
896
    case 82:
511
896
      sprintf(name, "WSASocketA");
512
896
      break;
513
521
    case 83:
514
521
      sprintf(name, "WSASocketW");
515
521
      break;
516
1.33k
    case 84:
517
1.33k
      sprintf(name, "WSAStringToAddressA");
518
1.33k
      break;
519
1.38k
    case 85:
520
1.38k
      sprintf(name, "WSAStringToAddressW");
521
1.38k
      break;
522
2.71k
    case 86:
523
2.71k
      sprintf(name, "WSAWaitForMultipleEvents");
524
2.71k
      break;
525
507
    case 87:
526
507
      sprintf(name, "WSCDeinstallProvider");
527
507
      break;
528
1.29k
    case 88:
529
1.29k
      sprintf(name, "WSCEnableNSProvider");
530
1.29k
      break;
531
6.54k
    case 89:
532
6.54k
      sprintf(name, "WSCEnumProtocols");
533
6.54k
      break;
534
551
    case 90:
535
551
      sprintf(name, "WSCGetProviderPath");
536
551
      break;
537
695
    case 91:
538
695
      sprintf(name, "WSCInstallNameSpace");
539
695
      break;
540
505
    case 92:
541
505
      sprintf(name, "WSCInstallProvider");
542
505
      break;
543
372
    case 93:
544
372
      sprintf(name, "WSCUnInstallNameSpace");
545
372
      break;
546
532
    case 94:
547
532
      sprintf(name, "WSCUpdateProvider");
548
532
      break;
549
1.01k
    case 95:
550
1.01k
      sprintf(name, "WSCWriteNameSpaceOrder");
551
1.01k
      break;
552
348
    case 96:
553
348
      sprintf(name, "WSCWriteProviderOrder");
554
348
      break;
555
646
    case 97:
556
646
      sprintf(name, "freeaddrinfo");
557
646
      break;
558
393
    case 98:
559
393
      sprintf(name, "getaddrinfo");
560
393
      break;
561
597
    case 99:
562
597
      sprintf(name, "getnameinfo");
563
597
      break;
564
1.39k
    case 101:
565
1.39k
      sprintf(name, "WSAAsyncSelect");
566
1.39k
      break;
567
304
    case 102:
568
304
      sprintf(name, "WSAAsyncGetHostByAddr");
569
304
      break;
570
407
    case 103:
571
407
      sprintf(name, "WSAAsyncGetHostByName");
572
407
      break;
573
209
    case 104:
574
209
      sprintf(name, "WSAAsyncGetProtoByNumber");
575
209
      break;
576
248
    case 105:
577
248
      sprintf(name, "WSAAsyncGetProtoByName");
578
248
      break;
579
2.87k
    case 106:
580
2.87k
      sprintf(name, "WSAAsyncGetServByPort");
581
2.87k
      break;
582
404
    case 107:
583
404
      sprintf(name, "WSAAsyncGetServByName");
584
404
      break;
585
1.10k
    case 108:
586
1.10k
      sprintf(name, "WSACancelAsyncRequest");
587
1.10k
      break;
588
293
    case 109:
589
293
      sprintf(name, "WSASetBlockingHook");
590
293
      break;
591
1.25k
    case 110:
592
1.25k
      sprintf(name, "WSAUnhookBlockingHook");
593
1.25k
      break;
594
1.46k
    case 111:
595
1.46k
      sprintf(name, "WSAGetLastError");
596
1.46k
      break;
597
616
    case 112:
598
616
      sprintf(name, "WSASetLastError");
599
616
      break;
600
1.25k
    case 113:
601
1.25k
      sprintf(name, "WSACancelBlockingCall");
602
1.25k
      break;
603
583
    case 114:
604
583
      sprintf(name, "WSAIsBlocking");
605
583
      break;
606
565
    case 115:
607
565
      sprintf(name, "WSAStartup");
608
565
      break;
609
448
    case 116:
610
448
      sprintf(name, "WSACleanup");
611
448
      break;
612
2.47k
    case 151:
613
2.47k
      sprintf(name, "__WSAFDIsSet");
614
2.47k
      break;
615
620
    case 500:
616
620
      sprintf(name, "WEP");
617
620
      break;
618
1.68M
    default:
619
1.68M
      break;
620
1.86M
    }
621
1.86M
  }
622
4.94M
  else if (strncasecmp(dll, "oleaut32.dll", 12) == 0)
623
4.58M
  {
624
4.58M
    switch (ord)
625
4.58M
    {
626
9.53k
    case 2:
627
9.53k
      sprintf(name, "SysAllocString");
628
9.53k
      break;
629
7.97k
    case 3:
630
7.97k
      sprintf(name, "SysReAllocString");
631
7.97k
      break;
632
1.51k
    case 4:
633
1.51k
      sprintf(name, "SysAllocStringLen");
634
1.51k
      break;
635
7.71k
    case 5:
636
7.71k
      sprintf(name, "SysReAllocStringLen");
637
7.71k
      break;
638
2.04k
    case 6:
639
2.04k
      sprintf(name, "SysFreeString");
640
2.04k
      break;
641
2.21k
    case 7:
642
2.21k
      sprintf(name, "SysStringLen");
643
2.21k
      break;
644
6.93k
    case 8:
645
6.93k
      sprintf(name, "VariantInit");
646
6.93k
      break;
647
2.74k
    case 9:
648
2.74k
      sprintf(name, "VariantClear");
649
2.74k
      break;
650
805
    case 10:
651
805
      sprintf(name, "VariantCopy");
652
805
      break;
653
2.25k
    case 11:
654
2.25k
      sprintf(name, "VariantCopyInd");
655
2.25k
      break;
656
716
    case 12:
657
716
      sprintf(name, "VariantChangeType");
658
716
      break;
659
323
    case 13:
660
323
      sprintf(name, "VariantTimeToDosDateTime");
661
323
      break;
662
2.07k
    case 14:
663
2.07k
      sprintf(name, "DosDateTimeToVariantTime");
664
2.07k
      break;
665
760
    case 15:
666
760
      sprintf(name, "SafeArrayCreate");
667
760
      break;
668
19.5k
    case 16:
669
19.5k
      sprintf(name, "SafeArrayDestroy");
670
19.5k
      break;
671
2.25k
    case 17:
672
2.25k
      sprintf(name, "SafeArrayGetDim");
673
2.25k
      break;
674
838
    case 18:
675
838
      sprintf(name, "SafeArrayGetElemsize");
676
838
      break;
677
314
    case 19:
678
314
      sprintf(name, "SafeArrayGetUBound");
679
314
      break;
680
3.03k
    case 20:
681
3.03k
      sprintf(name, "SafeArrayGetLBound");
682
3.03k
      break;
683
45.2k
    case 21:
684
45.2k
      sprintf(name, "SafeArrayLock");
685
45.2k
      break;
686
397
    case 22:
687
397
      sprintf(name, "SafeArrayUnlock");
688
397
      break;
689
977
    case 23:
690
977
      sprintf(name, "SafeArrayAccessData");
691
977
      break;
692
4.23k
    case 24:
693
4.23k
      sprintf(name, "SafeArrayUnaccessData");
694
4.23k
      break;
695
747
    case 25:
696
747
      sprintf(name, "SafeArrayGetElement");
697
747
      break;
698
239
    case 26:
699
239
      sprintf(name, "SafeArrayPutElement");
700
239
      break;
701
1.16k
    case 27:
702
1.16k
      sprintf(name, "SafeArrayCopy");
703
1.16k
      break;
704
2.36k
    case 28:
705
2.36k
      sprintf(name, "DispGetParam");
706
2.36k
      break;
707
6.52k
    case 29:
708
6.52k
      sprintf(name, "DispGetIDsOfNames");
709
6.52k
      break;
710
1.43k
    case 30:
711
1.43k
      sprintf(name, "DispInvoke");
712
1.43k
      break;
713
1.85k
    case 31:
714
1.85k
      sprintf(name, "CreateDispTypeInfo");
715
1.85k
      break;
716
4.05k
    case 32:
717
4.05k
      sprintf(name, "CreateStdDispatch");
718
4.05k
      break;
719
1.79k
    case 33:
720
1.79k
      sprintf(name, "RegisterActiveObject");
721
1.79k
      break;
722
5.12k
    case 34:
723
5.12k
      sprintf(name, "RevokeActiveObject");
724
5.12k
      break;
725
4.18k
    case 35:
726
4.18k
      sprintf(name, "GetActiveObject");
727
4.18k
      break;
728
1.27k
    case 36:
729
1.27k
      sprintf(name, "SafeArrayAllocDescriptor");
730
1.27k
      break;
731
1.05k
    case 37:
732
1.05k
      sprintf(name, "SafeArrayAllocData");
733
1.05k
      break;
734
1.33k
    case 38:
735
1.33k
      sprintf(name, "SafeArrayDestroyDescriptor");
736
1.33k
      break;
737
4.74k
    case 39:
738
4.74k
      sprintf(name, "SafeArrayDestroyData");
739
4.74k
      break;
740
2.32k
    case 40:
741
2.32k
      sprintf(name, "SafeArrayRedim");
742
2.32k
      break;
743
1.99k
    case 41:
744
1.99k
      sprintf(name, "SafeArrayAllocDescriptorEx");
745
1.99k
      break;
746
1.22k
    case 42:
747
1.22k
      sprintf(name, "SafeArrayCreateEx");
748
1.22k
      break;
749
1.65k
    case 43:
750
1.65k
      sprintf(name, "SafeArrayCreateVectorEx");
751
1.65k
      break;
752
1.12k
    case 44:
753
1.12k
      sprintf(name, "SafeArraySetRecordInfo");
754
1.12k
      break;
755
663
    case 45:
756
663
      sprintf(name, "SafeArrayGetRecordInfo");
757
663
      break;
758
668
    case 46:
759
668
      sprintf(name, "VarParseNumFromStr");
760
668
      break;
761
1.49k
    case 47:
762
1.49k
      sprintf(name, "VarNumFromParseNum");
763
1.49k
      break;
764
4.30k
    case 48:
765
4.30k
      sprintf(name, "VarI2FromUI1");
766
4.30k
      break;
767
3.09k
    case 49:
768
3.09k
      sprintf(name, "VarI2FromI4");
769
3.09k
      break;
770
2.17k
    case 50:
771
2.17k
      sprintf(name, "VarI2FromR4");
772
2.17k
      break;
773
2.89k
    case 51:
774
2.89k
      sprintf(name, "VarI2FromR8");
775
2.89k
      break;
776
1.11k
    case 52:
777
1.11k
      sprintf(name, "VarI2FromCy");
778
1.11k
      break;
779
1.02k
    case 53:
780
1.02k
      sprintf(name, "VarI2FromDate");
781
1.02k
      break;
782
1.19k
    case 54:
783
1.19k
      sprintf(name, "VarI2FromStr");
784
1.19k
      break;
785
1.64k
    case 55:
786
1.64k
      sprintf(name, "VarI2FromDisp");
787
1.64k
      break;
788
1.74k
    case 56:
789
1.74k
      sprintf(name, "VarI2FromBool");
790
1.74k
      break;
791
443
    case 57:
792
443
      sprintf(name, "SafeArraySetIID");
793
443
      break;
794
942
    case 58:
795
942
      sprintf(name, "VarI4FromUI1");
796
942
      break;
797
2.33k
    case 59:
798
2.33k
      sprintf(name, "VarI4FromI2");
799
2.33k
      break;
800
525
    case 60:
801
525
      sprintf(name, "VarI4FromR4");
802
525
      break;
803
1.80k
    case 61:
804
1.80k
      sprintf(name, "VarI4FromR8");
805
1.80k
      break;
806
630
    case 62:
807
630
      sprintf(name, "VarI4FromCy");
808
630
      break;
809
1.06k
    case 63:
810
1.06k
      sprintf(name, "VarI4FromDate");
811
1.06k
      break;
812
1.06k
    case 64:
813
1.06k
      sprintf(name, "VarI4FromStr");
814
1.06k
      break;
815
679
    case 65:
816
679
      sprintf(name, "VarI4FromDisp");
817
679
      break;
818
2.93k
    case 66:
819
2.93k
      sprintf(name, "VarI4FromBool");
820
2.93k
      break;
821
1.33k
    case 67:
822
1.33k
      sprintf(name, "SafeArrayGetIID");
823
1.33k
      break;
824
3.44k
    case 68:
825
3.44k
      sprintf(name, "VarR4FromUI1");
826
3.44k
      break;
827
5.09k
    case 69:
828
5.09k
      sprintf(name, "VarR4FromI2");
829
5.09k
      break;
830
6.89k
    case 70:
831
6.89k
      sprintf(name, "VarR4FromI4");
832
6.89k
      break;
833
2.88k
    case 71:
834
2.88k
      sprintf(name, "VarR4FromR8");
835
2.88k
      break;
836
924
    case 72:
837
924
      sprintf(name, "VarR4FromCy");
838
924
      break;
839
354
    case 73:
840
354
      sprintf(name, "VarR4FromDate");
841
354
      break;
842
402
    case 74:
843
402
      sprintf(name, "VarR4FromStr");
844
402
      break;
845
1.02k
    case 75:
846
1.02k
      sprintf(name, "VarR4FromDisp");
847
1.02k
      break;
848
2.34k
    case 76:
849
2.34k
      sprintf(name, "VarR4FromBool");
850
2.34k
      break;
851
1.05k
    case 77:
852
1.05k
      sprintf(name, "SafeArrayGetVartype");
853
1.05k
      break;
854
247
    case 78:
855
247
      sprintf(name, "VarR8FromUI1");
856
247
      break;
857
313
    case 79:
858
313
      sprintf(name, "VarR8FromI2");
859
313
      break;
860
821
    case 80:
861
821
      sprintf(name, "VarR8FromI4");
862
821
      break;
863
2.44k
    case 81:
864
2.44k
      sprintf(name, "VarR8FromR4");
865
2.44k
      break;
866
3.51k
    case 82:
867
3.51k
      sprintf(name, "VarR8FromCy");
868
3.51k
      break;
869
264
    case 83:
870
264
      sprintf(name, "VarR8FromDate");
871
264
      break;
872
1.16k
    case 84:
873
1.16k
      sprintf(name, "VarR8FromStr");
874
1.16k
      break;
875
1.06k
    case 85:
876
1.06k
      sprintf(name, "VarR8FromDisp");
877
1.06k
      break;
878
344
    case 86:
879
344
      sprintf(name, "VarR8FromBool");
880
344
      break;
881
366
    case 87:
882
366
      sprintf(name, "VarFormat");
883
366
      break;
884
1.67k
    case 88:
885
1.67k
      sprintf(name, "VarDateFromUI1");
886
1.67k
      break;
887
11.6k
    case 89:
888
11.6k
      sprintf(name, "VarDateFromI2");
889
11.6k
      break;
890
1.06k
    case 90:
891
1.06k
      sprintf(name, "VarDateFromI4");
892
1.06k
      break;
893
596
    case 91:
894
596
      sprintf(name, "VarDateFromR4");
895
596
      break;
896
2.01k
    case 92:
897
2.01k
      sprintf(name, "VarDateFromR8");
898
2.01k
      break;
899
1.17k
    case 93:
900
1.17k
      sprintf(name, "VarDateFromCy");
901
1.17k
      break;
902
741
    case 94:
903
741
      sprintf(name, "VarDateFromStr");
904
741
      break;
905
1.30k
    case 95:
906
1.30k
      sprintf(name, "VarDateFromDisp");
907
1.30k
      break;
908
399
    case 96:
909
399
      sprintf(name, "VarDateFromBool");
910
399
      break;
911
998
    case 97:
912
998
      sprintf(name, "VarFormatDateTime");
913
998
      break;
914
474
    case 98:
915
474
      sprintf(name, "VarCyFromUI1");
916
474
      break;
917
712
    case 99:
918
712
      sprintf(name, "VarCyFromI2");
919
712
      break;
920
1.58k
    case 100:
921
1.58k
      sprintf(name, "VarCyFromI4");
922
1.58k
      break;
923
2.26k
    case 101:
924
2.26k
      sprintf(name, "VarCyFromR4");
925
2.26k
      break;
926
603
    case 102:
927
603
      sprintf(name, "VarCyFromR8");
928
603
      break;
929
1.65k
    case 103:
930
1.65k
      sprintf(name, "VarCyFromDate");
931
1.65k
      break;
932
382
    case 104:
933
382
      sprintf(name, "VarCyFromStr");
934
382
      break;
935
319
    case 105:
936
319
      sprintf(name, "VarCyFromDisp");
937
319
      break;
938
1.37k
    case 106:
939
1.37k
      sprintf(name, "VarCyFromBool");
940
1.37k
      break;
941
1.18k
    case 107:
942
1.18k
      sprintf(name, "VarFormatNumber");
943
1.18k
      break;
944
1.76k
    case 108:
945
1.76k
      sprintf(name, "VarBstrFromUI1");
946
1.76k
      break;
947
997
    case 109:
948
997
      sprintf(name, "VarBstrFromI2");
949
997
      break;
950
2.36k
    case 110:
951
2.36k
      sprintf(name, "VarBstrFromI4");
952
2.36k
      break;
953
4.02k
    case 111:
954
4.02k
      sprintf(name, "VarBstrFromR4");
955
4.02k
      break;
956
1.46k
    case 112:
957
1.46k
      sprintf(name, "VarBstrFromR8");
958
1.46k
      break;
959
7.31k
    case 113:
960
7.31k
      sprintf(name, "VarBstrFromCy");
961
7.31k
      break;
962
473
    case 114:
963
473
      sprintf(name, "VarBstrFromDate");
964
473
      break;
965
1.70k
    case 115:
966
1.70k
      sprintf(name, "VarBstrFromDisp");
967
1.70k
      break;
968
1.41k
    case 116:
969
1.41k
      sprintf(name, "VarBstrFromBool");
970
1.41k
      break;
971
363
    case 117:
972
363
      sprintf(name, "VarFormatPercent");
973
363
      break;
974
275
    case 118:
975
275
      sprintf(name, "VarBoolFromUI1");
976
275
      break;
977
977
    case 119:
978
977
      sprintf(name, "VarBoolFromI2");
979
977
      break;
980
2.97k
    case 120:
981
2.97k
      sprintf(name, "VarBoolFromI4");
982
2.97k
      break;
983
3.51k
    case 121:
984
3.51k
      sprintf(name, "VarBoolFromR4");
985
3.51k
      break;
986
4.39k
    case 122:
987
4.39k
      sprintf(name, "VarBoolFromR8");
988
4.39k
      break;
989
388
    case 123:
990
388
      sprintf(name, "VarBoolFromDate");
991
388
      break;
992
2.48k
    case 124:
993
2.48k
      sprintf(name, "VarBoolFromCy");
994
2.48k
      break;
995
2.81k
    case 125:
996
2.81k
      sprintf(name, "VarBoolFromStr");
997
2.81k
      break;
998
10.2k
    case 126:
999
10.2k
      sprintf(name, "VarBoolFromDisp");
1000
10.2k
      break;
1001
766
    case 127:
1002
766
      sprintf(name, "VarFormatCurrency");
1003
766
      break;
1004
18.4k
    case 128:
1005
18.4k
      sprintf(name, "VarWeekdayName");
1006
18.4k
      break;
1007
883
    case 129:
1008
883
      sprintf(name, "VarMonthName");
1009
883
      break;
1010
541
    case 130:
1011
541
      sprintf(name, "VarUI1FromI2");
1012
541
      break;
1013
862
    case 131:
1014
862
      sprintf(name, "VarUI1FromI4");
1015
862
      break;
1016
347
    case 132:
1017
347
      sprintf(name, "VarUI1FromR4");
1018
347
      break;
1019
299
    case 133:
1020
299
      sprintf(name, "VarUI1FromR8");
1021
299
      break;
1022
2.54k
    case 134:
1023
2.54k
      sprintf(name, "VarUI1FromCy");
1024
2.54k
      break;
1025
299
    case 135:
1026
299
      sprintf(name, "VarUI1FromDate");
1027
299
      break;
1028
277
    case 136:
1029
277
      sprintf(name, "VarUI1FromStr");
1030
277
      break;
1031
1.09k
    case 137:
1032
1.09k
      sprintf(name, "VarUI1FromDisp");
1033
1.09k
      break;
1034
2.37k
    case 138:
1035
2.37k
      sprintf(name, "VarUI1FromBool");
1036
2.37k
      break;
1037
294
    case 139:
1038
294
      sprintf(name, "VarFormatFromTokens");
1039
294
      break;
1040
1.01k
    case 140:
1041
1.01k
      sprintf(name, "VarTokenizeFormatString");
1042
1.01k
      break;
1043
997
    case 141:
1044
997
      sprintf(name, "VarAdd");
1045
997
      break;
1046
848
    case 142:
1047
848
      sprintf(name, "VarAnd");
1048
848
      break;
1049
211
    case 143:
1050
211
      sprintf(name, "VarDiv");
1051
211
      break;
1052
2.53k
    case 144:
1053
2.53k
      sprintf(name, "DllCanUnloadNow");
1054
2.53k
      break;
1055
793
    case 145:
1056
793
      sprintf(name, "DllGetClassObject");
1057
793
      break;
1058
1.87k
    case 146:
1059
1.87k
      sprintf(name, "DispCallFunc");
1060
1.87k
      break;
1061
541
    case 147:
1062
541
      sprintf(name, "VariantChangeTypeEx");
1063
541
      break;
1064
528
    case 148:
1065
528
      sprintf(name, "SafeArrayPtrOfIndex");
1066
528
      break;
1067
1.56k
    case 149:
1068
1.56k
      sprintf(name, "SysStringByteLen");
1069
1.56k
      break;
1070
251
    case 150:
1071
251
      sprintf(name, "SysAllocStringByteLen");
1072
251
      break;
1073
8.54k
    case 151:
1074
8.54k
      sprintf(name, "DllRegisterServer");
1075
8.54k
      break;
1076
272
    case 152:
1077
272
      sprintf(name, "VarEqv");
1078
272
      break;
1079
281
    case 153:
1080
281
      sprintf(name, "VarIdiv");
1081
281
      break;
1082
1.22k
    case 154:
1083
1.22k
      sprintf(name, "VarImp");
1084
1.22k
      break;
1085
724
    case 155:
1086
724
      sprintf(name, "VarMod");
1087
724
      break;
1088
271
    case 156:
1089
271
      sprintf(name, "VarMul");
1090
271
      break;
1091
453
    case 157:
1092
453
      sprintf(name, "VarOr");
1093
453
      break;
1094
727
    case 158:
1095
727
      sprintf(name, "VarPow");
1096
727
      break;
1097
213
    case 159:
1098
213
      sprintf(name, "VarSub");
1099
213
      break;
1100
493
    case 160:
1101
493
      sprintf(name, "CreateTypeLib");
1102
493
      break;
1103
1.16k
    case 161:
1104
1.16k
      sprintf(name, "LoadTypeLib");
1105
1.16k
      break;
1106
724
    case 162:
1107
724
      sprintf(name, "LoadRegTypeLib");
1108
724
      break;
1109
269
    case 163:
1110
269
      sprintf(name, "RegisterTypeLib");
1111
269
      break;
1112
458
    case 164:
1113
458
      sprintf(name, "QueryPathOfRegTypeLib");
1114
458
      break;
1115
644
    case 165:
1116
644
      sprintf(name, "LHashValOfNameSys");
1117
644
      break;
1118
423
    case 166:
1119
423
      sprintf(name, "LHashValOfNameSysA");
1120
423
      break;
1121
656
    case 167:
1122
656
      sprintf(name, "VarXor");
1123
656
      break;
1124
429
    case 168:
1125
429
      sprintf(name, "VarAbs");
1126
429
      break;
1127
686
    case 169:
1128
686
      sprintf(name, "VarFix");
1129
686
      break;
1130
36.7k
    case 170:
1131
36.7k
      sprintf(name, "OaBuildVersion");
1132
36.7k
      break;
1133
686
    case 171:
1134
686
      sprintf(name, "ClearCustData");
1135
686
      break;
1136
523
    case 172:
1137
523
      sprintf(name, "VarInt");
1138
523
      break;
1139
2.12k
    case 173:
1140
2.12k
      sprintf(name, "VarNeg");
1141
2.12k
      break;
1142
762
    case 174:
1143
762
      sprintf(name, "VarNot");
1144
762
      break;
1145
1.65k
    case 175:
1146
1.65k
      sprintf(name, "VarRound");
1147
1.65k
      break;
1148
1.71k
    case 176:
1149
1.71k
      sprintf(name, "VarCmp");
1150
1.71k
      break;
1151
2.98k
    case 177:
1152
2.98k
      sprintf(name, "VarDecAdd");
1153
2.98k
      break;
1154
2.02k
    case 178:
1155
2.02k
      sprintf(name, "VarDecDiv");
1156
2.02k
      break;
1157
3.62k
    case 179:
1158
3.62k
      sprintf(name, "VarDecMul");
1159
3.62k
      break;
1160
230
    case 180:
1161
230
      sprintf(name, "CreateTypeLib2");
1162
230
      break;
1163
420
    case 181:
1164
420
      sprintf(name, "VarDecSub");
1165
420
      break;
1166
659
    case 182:
1167
659
      sprintf(name, "VarDecAbs");
1168
659
      break;
1169
375
    case 183:
1170
375
      sprintf(name, "LoadTypeLibEx");
1171
375
      break;
1172
1.72k
    case 184:
1173
1.72k
      sprintf(name, "SystemTimeToVariantTime");
1174
1.72k
      break;
1175
226
    case 185:
1176
226
      sprintf(name, "VariantTimeToSystemTime");
1177
226
      break;
1178
677
    case 186:
1179
677
      sprintf(name, "UnRegisterTypeLib");
1180
677
      break;
1181
700
    case 187:
1182
700
      sprintf(name, "VarDecFix");
1183
700
      break;
1184
1.37k
    case 188:
1185
1.37k
      sprintf(name, "VarDecInt");
1186
1.37k
      break;
1187
1.25k
    case 189:
1188
1.25k
      sprintf(name, "VarDecNeg");
1189
1.25k
      break;
1190
2.46k
    case 190:
1191
2.46k
      sprintf(name, "VarDecFromUI1");
1192
2.46k
      break;
1193
922
    case 191:
1194
922
      sprintf(name, "VarDecFromI2");
1195
922
      break;
1196
1.10k
    case 192:
1197
1.10k
      sprintf(name, "VarDecFromI4");
1198
1.10k
      break;
1199
4.96k
    case 193:
1200
4.96k
      sprintf(name, "VarDecFromR4");
1201
4.96k
      break;
1202
1.04k
    case 194:
1203
1.04k
      sprintf(name, "VarDecFromR8");
1204
1.04k
      break;
1205
484
    case 195:
1206
484
      sprintf(name, "VarDecFromDate");
1207
484
      break;
1208
506
    case 196:
1209
506
      sprintf(name, "VarDecFromCy");
1210
506
      break;
1211
374
    case 197:
1212
374
      sprintf(name, "VarDecFromStr");
1213
374
      break;
1214
251
    case 198:
1215
251
      sprintf(name, "VarDecFromDisp");
1216
251
      break;
1217
1.19k
    case 199:
1218
1.19k
      sprintf(name, "VarDecFromBool");
1219
1.19k
      break;
1220
1.83k
    case 200:
1221
1.83k
      sprintf(name, "GetErrorInfo");
1222
1.83k
      break;
1223
492
    case 201:
1224
492
      sprintf(name, "SetErrorInfo");
1225
492
      break;
1226
351
    case 202:
1227
351
      sprintf(name, "CreateErrorInfo");
1228
351
      break;
1229
1.08k
    case 203:
1230
1.08k
      sprintf(name, "VarDecRound");
1231
1.08k
      break;
1232
1.06k
    case 204:
1233
1.06k
      sprintf(name, "VarDecCmp");
1234
1.06k
      break;
1235
1.23k
    case 205:
1236
1.23k
      sprintf(name, "VarI2FromI1");
1237
1.23k
      break;
1238
285
    case 206:
1239
285
      sprintf(name, "VarI2FromUI2");
1240
285
      break;
1241
329
    case 207:
1242
329
      sprintf(name, "VarI2FromUI4");
1243
329
      break;
1244
264
    case 208:
1245
264
      sprintf(name, "VarI2FromDec");
1246
264
      break;
1247
1.17k
    case 209:
1248
1.17k
      sprintf(name, "VarI4FromI1");
1249
1.17k
      break;
1250
1.12k
    case 210:
1251
1.12k
      sprintf(name, "VarI4FromUI2");
1252
1.12k
      break;
1253
323
    case 211:
1254
323
      sprintf(name, "VarI4FromUI4");
1255
323
      break;
1256
2.10k
    case 212:
1257
2.10k
      sprintf(name, "VarI4FromDec");
1258
2.10k
      break;
1259
503
    case 213:
1260
503
      sprintf(name, "VarR4FromI1");
1261
503
      break;
1262
14.6k
    case 214:
1263
14.6k
      sprintf(name, "VarR4FromUI2");
1264
14.6k
      break;
1265
3.33k
    case 215:
1266
3.33k
      sprintf(name, "VarR4FromUI4");
1267
3.33k
      break;
1268
330
    case 216:
1269
330
      sprintf(name, "VarR4FromDec");
1270
330
      break;
1271
378
    case 217:
1272
378
      sprintf(name, "VarR8FromI1");
1273
378
      break;
1274
1.39k
    case 218:
1275
1.39k
      sprintf(name, "VarR8FromUI2");
1276
1.39k
      break;
1277
2.33k
    case 219:
1278
2.33k
      sprintf(name, "VarR8FromUI4");
1279
2.33k
      break;
1280
819
    case 220:
1281
819
      sprintf(name, "VarR8FromDec");
1282
819
      break;
1283
3.25k
    case 221:
1284
3.25k
      sprintf(name, "VarDateFromI1");
1285
3.25k
      break;
1286
9.54k
    case 222:
1287
9.54k
      sprintf(name, "VarDateFromUI2");
1288
9.54k
      break;
1289
360
    case 223:
1290
360
      sprintf(name, "VarDateFromUI4");
1291
360
      break;
1292
350
    case 224:
1293
350
      sprintf(name, "VarDateFromDec");
1294
350
      break;
1295
312
    case 225:
1296
312
      sprintf(name, "VarCyFromI1");
1297
312
      break;
1298
356
    case 226:
1299
356
      sprintf(name, "VarCyFromUI2");
1300
356
      break;
1301
661
    case 227:
1302
661
      sprintf(name, "VarCyFromUI4");
1303
661
      break;
1304
808
    case 228:
1305
808
      sprintf(name, "VarCyFromDec");
1306
808
      break;
1307
375
    case 229:
1308
375
      sprintf(name, "VarBstrFromI1");
1309
375
      break;
1310
2.37k
    case 230:
1311
2.37k
      sprintf(name, "VarBstrFromUI2");
1312
2.37k
      break;
1313
1.20k
    case 231:
1314
1.20k
      sprintf(name, "VarBstrFromUI4");
1315
1.20k
      break;
1316
2.20k
    case 232:
1317
2.20k
      sprintf(name, "VarBstrFromDec");
1318
2.20k
      break;
1319
1.55k
    case 233:
1320
1.55k
      sprintf(name, "VarBoolFromI1");
1321
1.55k
      break;
1322
659
    case 234:
1323
659
      sprintf(name, "VarBoolFromUI2");
1324
659
      break;
1325
1.06k
    case 235:
1326
1.06k
      sprintf(name, "VarBoolFromUI4");
1327
1.06k
      break;
1328
315
    case 236:
1329
315
      sprintf(name, "VarBoolFromDec");
1330
315
      break;
1331
546
    case 237:
1332
546
      sprintf(name, "VarUI1FromI1");
1333
546
      break;
1334
322
    case 238:
1335
322
      sprintf(name, "VarUI1FromUI2");
1336
322
      break;
1337
307
    case 239:
1338
307
      sprintf(name, "VarUI1FromUI4");
1339
307
      break;
1340
1.77k
    case 240:
1341
1.77k
      sprintf(name, "VarUI1FromDec");
1342
1.77k
      break;
1343
247
    case 241:
1344
247
      sprintf(name, "VarDecFromI1");
1345
247
      break;
1346
857
    case 242:
1347
857
      sprintf(name, "VarDecFromUI2");
1348
857
      break;
1349
405
    case 243:
1350
405
      sprintf(name, "VarDecFromUI4");
1351
405
      break;
1352
1.21k
    case 244:
1353
1.21k
      sprintf(name, "VarI1FromUI1");
1354
1.21k
      break;
1355
644
    case 245:
1356
644
      sprintf(name, "VarI1FromI2");
1357
644
      break;
1358
10.5k
    case 246:
1359
10.5k
      sprintf(name, "VarI1FromI4");
1360
10.5k
      break;
1361
646
    case 247:
1362
646
      sprintf(name, "VarI1FromR4");
1363
646
      break;
1364
1.62k
    case 248:
1365
1.62k
      sprintf(name, "VarI1FromR8");
1366
1.62k
      break;
1367
1.46k
    case 249:
1368
1.46k
      sprintf(name, "VarI1FromDate");
1369
1.46k
      break;
1370
4.37k
    case 250:
1371
4.37k
      sprintf(name, "VarI1FromCy");
1372
4.37k
      break;
1373
513
    case 251:
1374
513
      sprintf(name, "VarI1FromStr");
1375
513
      break;
1376
8.15k
    case 252:
1377
8.15k
      sprintf(name, "VarI1FromDisp");
1378
8.15k
      break;
1379
2.49k
    case 253:
1380
2.49k
      sprintf(name, "VarI1FromBool");
1381
2.49k
      break;
1382
856
    case 254:
1383
856
      sprintf(name, "VarI1FromUI2");
1384
856
      break;
1385
25.7k
    case 255:
1386
25.7k
      sprintf(name, "VarI1FromUI4");
1387
25.7k
      break;
1388
24.7k
    case 256:
1389
24.7k
      sprintf(name, "VarI1FromDec");
1390
24.7k
      break;
1391
9.11k
    case 257:
1392
9.11k
      sprintf(name, "VarUI2FromUI1");
1393
9.11k
      break;
1394
478
    case 258:
1395
478
      sprintf(name, "VarUI2FromI2");
1396
478
      break;
1397
885
    case 259:
1398
885
      sprintf(name, "VarUI2FromI4");
1399
885
      break;
1400
2.24k
    case 260:
1401
2.24k
      sprintf(name, "VarUI2FromR4");
1402
2.24k
      break;
1403
612
    case 261:
1404
612
      sprintf(name, "VarUI2FromR8");
1405
612
      break;
1406
444
    case 262:
1407
444
      sprintf(name, "VarUI2FromDate");
1408
444
      break;
1409
459
    case 263:
1410
459
      sprintf(name, "VarUI2FromCy");
1411
459
      break;
1412
1.02k
    case 264:
1413
1.02k
      sprintf(name, "VarUI2FromStr");
1414
1.02k
      break;
1415
1.93k
    case 265:
1416
1.93k
      sprintf(name, "VarUI2FromDisp");
1417
1.93k
      break;
1418
538
    case 266:
1419
538
      sprintf(name, "VarUI2FromBool");
1420
538
      break;
1421
532
    case 267:
1422
532
      sprintf(name, "VarUI2FromI1");
1423
532
      break;
1424
800
    case 268:
1425
800
      sprintf(name, "VarUI2FromUI4");
1426
800
      break;
1427
266
    case 269:
1428
266
      sprintf(name, "VarUI2FromDec");
1429
266
      break;
1430
691
    case 270:
1431
691
      sprintf(name, "VarUI4FromUI1");
1432
691
      break;
1433
1.74k
    case 271:
1434
1.74k
      sprintf(name, "VarUI4FromI2");
1435
1.74k
      break;
1436
1.78k
    case 272:
1437
1.78k
      sprintf(name, "VarUI4FromI4");
1438
1.78k
      break;
1439
930
    case 273:
1440
930
      sprintf(name, "VarUI4FromR4");
1441
930
      break;
1442
3.25k
    case 274:
1443
3.25k
      sprintf(name, "VarUI4FromR8");
1444
3.25k
      break;
1445
249
    case 275:
1446
249
      sprintf(name, "VarUI4FromDate");
1447
249
      break;
1448
2.65k
    case 276:
1449
2.65k
      sprintf(name, "VarUI4FromCy");
1450
2.65k
      break;
1451
1.21k
    case 277:
1452
1.21k
      sprintf(name, "VarUI4FromStr");
1453
1.21k
      break;
1454
985
    case 278:
1455
985
      sprintf(name, "VarUI4FromDisp");
1456
985
      break;
1457
818
    case 279:
1458
818
      sprintf(name, "VarUI4FromBool");
1459
818
      break;
1460
1.85k
    case 280:
1461
1.85k
      sprintf(name, "VarUI4FromI1");
1462
1.85k
      break;
1463
1.65k
    case 281:
1464
1.65k
      sprintf(name, "VarUI4FromUI2");
1465
1.65k
      break;
1466
487
    case 282:
1467
487
      sprintf(name, "VarUI4FromDec");
1468
487
      break;
1469
1.05k
    case 283:
1470
1.05k
      sprintf(name, "BSTR_UserSize");
1471
1.05k
      break;
1472
3.62k
    case 284:
1473
3.62k
      sprintf(name, "BSTR_UserMarshal");
1474
3.62k
      break;
1475
1.23k
    case 285:
1476
1.23k
      sprintf(name, "BSTR_UserUnmarshal");
1477
1.23k
      break;
1478
637
    case 286:
1479
637
      sprintf(name, "BSTR_UserFree");
1480
637
      break;
1481
272
    case 287:
1482
272
      sprintf(name, "VARIANT_UserSize");
1483
272
      break;
1484
3.14k
    case 288:
1485
3.14k
      sprintf(name, "VARIANT_UserMarshal");
1486
3.14k
      break;
1487
318
    case 289:
1488
318
      sprintf(name, "VARIANT_UserUnmarshal");
1489
318
      break;
1490
300
    case 290:
1491
300
      sprintf(name, "VARIANT_UserFree");
1492
300
      break;
1493
538
    case 291:
1494
538
      sprintf(name, "LPSAFEARRAY_UserSize");
1495
538
      break;
1496
517
    case 292:
1497
517
      sprintf(name, "LPSAFEARRAY_UserMarshal");
1498
517
      break;
1499
1.09k
    case 293:
1500
1.09k
      sprintf(name, "LPSAFEARRAY_UserUnmarshal");
1501
1.09k
      break;
1502
284
    case 294:
1503
284
      sprintf(name, "LPSAFEARRAY_UserFree");
1504
284
      break;
1505
532
    case 295:
1506
532
      sprintf(name, "LPSAFEARRAY_Size");
1507
532
      break;
1508
740
    case 296:
1509
740
      sprintf(name, "LPSAFEARRAY_Marshal");
1510
740
      break;
1511
398
    case 297:
1512
398
      sprintf(name, "LPSAFEARRAY_Unmarshal");
1513
398
      break;
1514
1.13k
    case 298:
1515
1.13k
      sprintf(name, "VarDecCmpR8");
1516
1.13k
      break;
1517
449
    case 299:
1518
449
      sprintf(name, "VarCyAdd");
1519
449
      break;
1520
221
    case 300:
1521
221
      sprintf(name, "DllUnregisterServer");
1522
221
      break;
1523
476
    case 301:
1524
476
      sprintf(name, "OACreateTypeLib2");
1525
476
      break;
1526
2.13k
    case 303:
1527
2.13k
      sprintf(name, "VarCyMul");
1528
2.13k
      break;
1529
1.88k
    case 304:
1530
1.88k
      sprintf(name, "VarCyMulI4");
1531
1.88k
      break;
1532
788
    case 305:
1533
788
      sprintf(name, "VarCySub");
1534
788
      break;
1535
631
    case 306:
1536
631
      sprintf(name, "VarCyAbs");
1537
631
      break;
1538
1.09k
    case 307:
1539
1.09k
      sprintf(name, "VarCyFix");
1540
1.09k
      break;
1541
2.58k
    case 308:
1542
2.58k
      sprintf(name, "VarCyInt");
1543
2.58k
      break;
1544
1.70k
    case 309:
1545
1.70k
      sprintf(name, "VarCyNeg");
1546
1.70k
      break;
1547
674
    case 310:
1548
674
      sprintf(name, "VarCyRound");
1549
674
      break;
1550
1.00k
    case 311:
1551
1.00k
      sprintf(name, "VarCyCmp");
1552
1.00k
      break;
1553
602
    case 312:
1554
602
      sprintf(name, "VarCyCmpR8");
1555
602
      break;
1556
371
    case 313:
1557
371
      sprintf(name, "VarBstrCat");
1558
371
      break;
1559
2.28k
    case 314:
1560
2.28k
      sprintf(name, "VarBstrCmp");
1561
2.28k
      break;
1562
343
    case 315:
1563
343
      sprintf(name, "VarR8Pow");
1564
343
      break;
1565
486
    case 316:
1566
486
      sprintf(name, "VarR4CmpR8");
1567
486
      break;
1568
3.11k
    case 317:
1569
3.11k
      sprintf(name, "VarR8Round");
1570
3.11k
      break;
1571
245
    case 318:
1572
245
      sprintf(name, "VarCat");
1573
245
      break;
1574
254
    case 319:
1575
254
      sprintf(name, "VarDateFromUdateEx");
1576
254
      break;
1577
1.68k
    case 322:
1578
1.68k
      sprintf(name, "GetRecordInfoFromGuids");
1579
1.68k
      break;
1580
317
    case 323:
1581
317
      sprintf(name, "GetRecordInfoFromTypeInfo");
1582
317
      break;
1583
648
    case 325:
1584
648
      sprintf(name, "SetVarConversionLocaleSetting");
1585
648
      break;
1586
2.23k
    case 326:
1587
2.23k
      sprintf(name, "GetVarConversionLocaleSetting");
1588
2.23k
      break;
1589
205
    case 327:
1590
205
      sprintf(name, "SetOaNoCache");
1591
205
      break;
1592
530
    case 329:
1593
530
      sprintf(name, "VarCyMulI8");
1594
530
      break;
1595
372
    case 330:
1596
372
      sprintf(name, "VarDateFromUdate");
1597
372
      break;
1598
1.11k
    case 331:
1599
1.11k
      sprintf(name, "VarUdateFromDate");
1600
1.11k
      break;
1601
412
    case 332:
1602
412
      sprintf(name, "GetAltMonthNames");
1603
412
      break;
1604
3.55k
    case 333:
1605
3.55k
      sprintf(name, "VarI8FromUI1");
1606
3.55k
      break;
1607
243
    case 334:
1608
243
      sprintf(name, "VarI8FromI2");
1609
243
      break;
1610
323
    case 335:
1611
323
      sprintf(name, "VarI8FromR4");
1612
323
      break;
1613
226
    case 336:
1614
226
      sprintf(name, "VarI8FromR8");
1615
226
      break;
1616
761
    case 337:
1617
761
      sprintf(name, "VarI8FromCy");
1618
761
      break;
1619
2.08k
    case 338:
1620
2.08k
      sprintf(name, "VarI8FromDate");
1621
2.08k
      break;
1622
280
    case 339:
1623
280
      sprintf(name, "VarI8FromStr");
1624
280
      break;
1625
496
    case 340:
1626
496
      sprintf(name, "VarI8FromDisp");
1627
496
      break;
1628
372
    case 341:
1629
372
      sprintf(name, "VarI8FromBool");
1630
372
      break;
1631
5.81k
    case 342:
1632
5.81k
      sprintf(name, "VarI8FromI1");
1633
5.81k
      break;
1634
531
    case 343:
1635
531
      sprintf(name, "VarI8FromUI2");
1636
531
      break;
1637
534
    case 344:
1638
534
      sprintf(name, "VarI8FromUI4");
1639
534
      break;
1640
377
    case 345:
1641
377
      sprintf(name, "VarI8FromDec");
1642
377
      break;
1643
3.24k
    case 346:
1644
3.24k
      sprintf(name, "VarI2FromI8");
1645
3.24k
      break;
1646
317
    case 347:
1647
317
      sprintf(name, "VarI2FromUI8");
1648
317
      break;
1649
224
    case 348:
1650
224
      sprintf(name, "VarI4FromI8");
1651
224
      break;
1652
3.53k
    case 349:
1653
3.53k
      sprintf(name, "VarI4FromUI8");
1654
3.53k
      break;
1655
1.58k
    case 360:
1656
1.58k
      sprintf(name, "VarR4FromI8");
1657
1.58k
      break;
1658
4.37k
    case 361:
1659
4.37k
      sprintf(name, "VarR4FromUI8");
1660
4.37k
      break;
1661
1.31k
    case 362:
1662
1.31k
      sprintf(name, "VarR8FromI8");
1663
1.31k
      break;
1664
359
    case 363:
1665
359
      sprintf(name, "VarR8FromUI8");
1666
359
      break;
1667
392
    case 364:
1668
392
      sprintf(name, "VarDateFromI8");
1669
392
      break;
1670
457
    case 365:
1671
457
      sprintf(name, "VarDateFromUI8");
1672
457
      break;
1673
399
    case 366:
1674
399
      sprintf(name, "VarCyFromI8");
1675
399
      break;
1676
506
    case 367:
1677
506
      sprintf(name, "VarCyFromUI8");
1678
506
      break;
1679
330
    case 368:
1680
330
      sprintf(name, "VarBstrFromI8");
1681
330
      break;
1682
311
    case 369:
1683
311
      sprintf(name, "VarBstrFromUI8");
1684
311
      break;
1685
499
    case 370:
1686
499
      sprintf(name, "VarBoolFromI8");
1687
499
      break;
1688
453
    case 371:
1689
453
      sprintf(name, "VarBoolFromUI8");
1690
453
      break;
1691
11.6k
    case 372:
1692
11.6k
      sprintf(name, "VarUI1FromI8");
1693
11.6k
      break;
1694
3.56k
    case 373:
1695
3.56k
      sprintf(name, "VarUI1FromUI8");
1696
3.56k
      break;
1697
439
    case 374:
1698
439
      sprintf(name, "VarDecFromI8");
1699
439
      break;
1700
221
    case 375:
1701
221
      sprintf(name, "VarDecFromUI8");
1702
221
      break;
1703
1.52k
    case 376:
1704
1.52k
      sprintf(name, "VarI1FromI8");
1705
1.52k
      break;
1706
731
    case 377:
1707
731
      sprintf(name, "VarI1FromUI8");
1708
731
      break;
1709
444
    case 378:
1710
444
      sprintf(name, "VarUI2FromI8");
1711
444
      break;
1712
315
    case 379:
1713
315
      sprintf(name, "VarUI2FromUI8");
1714
315
      break;
1715
251
    case 401:
1716
251
      sprintf(name, "OleLoadPictureEx");
1717
251
      break;
1718
519
    case 402:
1719
519
      sprintf(name, "OleLoadPictureFileEx");
1720
519
      break;
1721
203
    case 411:
1722
203
      sprintf(name, "SafeArrayCreateVector");
1723
203
      break;
1724
349
    case 412:
1725
349
      sprintf(name, "SafeArrayCopyData");
1726
349
      break;
1727
207
    case 413:
1728
207
      sprintf(name, "VectorFromBstr");
1729
207
      break;
1730
228
    case 414:
1731
228
      sprintf(name, "BstrFromVector");
1732
228
      break;
1733
370
    case 415:
1734
370
      sprintf(name, "OleIconToCursor");
1735
370
      break;
1736
202
    case 416:
1737
202
      sprintf(name, "OleCreatePropertyFrameIndirect");
1738
202
      break;
1739
226
    case 417:
1740
226
      sprintf(name, "OleCreatePropertyFrame");
1741
226
      break;
1742
1.54k
    case 418:
1743
1.54k
      sprintf(name, "OleLoadPicture");
1744
1.54k
      break;
1745
266
    case 419:
1746
266
      sprintf(name, "OleCreatePictureIndirect");
1747
266
      break;
1748
277
    case 420:
1749
277
      sprintf(name, "OleCreateFontIndirect");
1750
277
      break;
1751
220
    case 421:
1752
220
      sprintf(name, "OleTranslateColor");
1753
220
      break;
1754
615
    case 422:
1755
615
      sprintf(name, "OleLoadPictureFile");
1756
615
      break;
1757
399
    case 423:
1758
399
      sprintf(name, "OleSavePictureFile");
1759
399
      break;
1760
219
    case 424:
1761
219
      sprintf(name, "OleLoadPicturePath");
1762
219
      break;
1763
218
    case 425:
1764
218
      sprintf(name, "VarUI4FromI8");
1765
218
      break;
1766
1.85k
    case 426:
1767
1.85k
      sprintf(name, "VarUI4FromUI8");
1768
1.85k
      break;
1769
2.42k
    case 427:
1770
2.42k
      sprintf(name, "VarI8FromUI8");
1771
2.42k
      break;
1772
306
    case 428:
1773
306
      sprintf(name, "VarUI8FromI8");
1774
306
      break;
1775
203
    case 429:
1776
203
      sprintf(name, "VarUI8FromUI1");
1777
203
      break;
1778
445
    case 430:
1779
445
      sprintf(name, "VarUI8FromI2");
1780
445
      break;
1781
294
    case 431:
1782
294
      sprintf(name, "VarUI8FromR4");
1783
294
      break;
1784
383
    case 432:
1785
383
      sprintf(name, "VarUI8FromR8");
1786
383
      break;
1787
444
    case 433:
1788
444
      sprintf(name, "VarUI8FromCy");
1789
444
      break;
1790
555
    case 434:
1791
555
      sprintf(name, "VarUI8FromDate");
1792
555
      break;
1793
196
    case 435:
1794
196
      sprintf(name, "VarUI8FromStr");
1795
196
      break;
1796
886
    case 436:
1797
886
      sprintf(name, "VarUI8FromDisp");
1798
886
      break;
1799
311
    case 437:
1800
311
      sprintf(name, "VarUI8FromBool");
1801
311
      break;
1802
344
    case 438:
1803
344
      sprintf(name, "VarUI8FromI1");
1804
344
      break;
1805
404
    case 439:
1806
404
      sprintf(name, "VarUI8FromUI2");
1807
404
      break;
1808
474
    case 440:
1809
474
      sprintf(name, "VarUI8FromUI4");
1810
474
      break;
1811
457
    case 441:
1812
457
      sprintf(name, "VarUI8FromDec");
1813
457
      break;
1814
312
    case 442:
1815
312
      sprintf(name, "RegisterTypeLibForUser");
1816
312
      break;
1817
359
    case 443:
1818
359
      sprintf(name, "UnRegisterTypeLibForUser");
1819
359
      break;
1820
3.82M
    default:
1821
3.82M
      break;
1822
4.58M
    }
1823
4.58M
  }
1824
1825
6.81M
  if (name[0] == '\0')
1826
5.87M
    sprintf(name, "ord%u", ord);
1827
1828
6.81M
  return yr_strdup(name);
1829
6.81M
}