mirror of
https://github.com/vivisect/vivisect
synced 2026-06-08 18:04:23 +00:00
911a95fe2b
* remove initial guesswork for PLT functions and placing elfplt_late, which attempts to determine *after* initial analysis pass is complete (meaning real PLT entries are likely to have been called and made into functions).
much cleanup required yet, but initial work seems good on a limited test set.
* cleanup
* tests pass for amd64/chown. failing on amd64/libc
* shut up a little, will ya!
* updates which work perfectly with amd64/chown and amd64/libc but fail miserably with libstdc++
unittest touch-ups (will need to reduce logging when we're settled things work)
* savegame before implementing heuristic function distance analysis
* getting close: added distance-heuristic to PLT finding algorithm (in addition to the GOT-XREF-offset method)
* got through the first few x86 bins
arm/sh fails for a really odd one-off reason. investigating.
* getting through all eltplt tests ok. modifying the data modules to remove LazyLoaderTrampoline.
* unit test tweaks... more to come.
* completed ELFPLT_late modifications and unittests. (mod to PLT-func-distance algorithm which checks for fractional distances...)
we have 2 primary algorithms for late-identifying PLT functions:
* GOT-Branch-Offset algorithm: determine how many bytes before the GOT-Offset XREF (the actual branch into library code) each function start is. This works great for most AMD64 mechanisms and code for which XREFs are easily laid down before this analysis module runs.
* PLT-Func-Distance algorithm: determine the smallest distance between valid PLT functions (not including a lazy-loader), and fill in the gaps
Enhancement: once we get the "smallest distance" between known good PLT functions, we check if we can divide them further using functional-comparisons.
This method works for i386-PIC code, where ebx is actually handed into the PLT-thunk and is a part of the GOT-Branch... which means that finding the GOT-Offset is trickier (and something left in the FuncAnalysisModule).
* BUGFIX: CodeFlow was *not* operating depth-first! since before the 2014 cutover to Github!
and all the things that happened because of that (unittests)
* cleanup of elfplt, elfplt_late, and a few logging touch-ups in unrelated (but noisy) modules.
* touchups
* bugfix and tweak: getGOT()
fixups per @rakuy0
tweaks to logging
* unittest tweak
logging tweak (added MIRE, which is worse than SHITE)
* QNX work-around
* yup, still want that first PLT function to be created... but move it to elfplt_late, and make it conditional on finding other functions in this PLT.
* defaultdict enhancement per @rakuy0 (thanks! that was an awesome suggestion!)
* woops. obviously still learning defaultdict.
* correction of unittest
* docstrings for the two PLT-placement algorithms
* changes per @rakuy0
* more updates per @rakuy0. naming and logging are hard.
357 lines
14 KiB
Python
357 lines
14 KiB
Python
ls_data = {
|
|
'imports': [
|
|
(0x618fd8, 8, 9, '*.__gmon_start__'),
|
|
(0x619000, 8, 9, '*.__ctype_toupper_loc'),
|
|
(0x619008, 8, 9, '*.getenv'),
|
|
(0x619010, 8, 9, '*.sigprocmask'),
|
|
(0x619018, 8, 9, '*.raise'),
|
|
(0x619020, 8, 9, '*.free'),
|
|
(0x619028, 8, 9, '*.localtime'),
|
|
(0x619030, 8, 9, '*.__mempcpy_chk'),
|
|
(0x619038, 8, 9, '*.abort'),
|
|
(0x619040, 8, 9, '*.__errno_location'),
|
|
(0x619048, 8, 9, '*.strncpy'),
|
|
(0x619050, 8, 9, '*.strncmp'),
|
|
(0x619058, 8, 9, '*._exit'),
|
|
(0x619060, 8, 9, '*.strcpy'),
|
|
(0x619068, 8, 9, '*.__fpending'),
|
|
(0x619070, 8, 9, '*.isatty'),
|
|
(0x619078, 8, 9, '*.sigaction'),
|
|
(0x619080, 8, 9, '*.iswcntrl'),
|
|
(0x619088, 8, 9, '*.wcswidth'),
|
|
(0x619090, 8, 9, '*.localeconv'),
|
|
(0x619098, 8, 9, '*.mbstowcs'),
|
|
(0x6190a0, 8, 9, '*.readlink'),
|
|
(0x6190a8, 8, 9, '*.textdomain'),
|
|
(0x6190b0, 8, 9, '*.fclose'),
|
|
(0x6190b8, 8, 9, '*.opendir'),
|
|
(0x6190c0, 8, 9, '*.getpwuid'),
|
|
(0x6190c8, 8, 9, '*.bindtextdomain'),
|
|
(0x6190d0, 8, 9, '*.stpcpy'),
|
|
(0x6190d8, 8, 9, '*.dcgettext'),
|
|
(0x6190e0, 8, 9, '*.__ctype_get_mb_cur_max'),
|
|
(0x6190e8, 8, 9, '*.strlen'),
|
|
(0x6190f0, 8, 9, '*.__lxstat'),
|
|
(0x6190f8, 8, 9, '*.__stack_chk_fail'),
|
|
(0x619100, 8, 9, '*.getopt_long'),
|
|
(0x619108, 8, 9, '*.mbrtowc'),
|
|
(0x619110, 8, 9, '*.strchr'),
|
|
(0x619118, 8, 9, '*.getgrgid'),
|
|
(0x619120, 8, 9, '*._obstack_begin'),
|
|
(0x619128, 8, 9, '*.__overflow'),
|
|
(0x619130, 8, 9, '*.strrchr'),
|
|
(0x619138, 8, 9, '*.fgetfilecon'),
|
|
(0x619140, 8, 9, '*.lseek'),
|
|
(0x619148, 8, 9, '*.gettimeofday'),
|
|
(0x619150, 8, 9, '*.__assert_fail'),
|
|
(0x619158, 8, 9, '*.__strtoul_internal'),
|
|
(0x619160, 8, 9, '*.fnmatch'),
|
|
(0x619168, 8, 9, '*.memset'),
|
|
(0x619170, 8, 9, '*.acl_get_tag_type'),
|
|
(0x619178, 8, 9, '*.ioctl'),
|
|
(0x619180, 8, 9, '*.closedir'),
|
|
(0x619188, 8, 9, '*.__libc_start_main'),
|
|
(0x619190, 8, 9, '*.memcmp'),
|
|
(0x619198, 8, 9, '*._setjmp'),
|
|
(0x6191a0, 8, 9, '*.fputs_unlocked'),
|
|
(0x6191a8, 8, 9, '*.calloc'),
|
|
(0x6191b0, 8, 9, '*.lgetfilecon'),
|
|
(0x6191b8, 8, 9, '*.strcmp'),
|
|
(0x6191c0, 8, 9, '*.signal'),
|
|
(0x6191c8, 8, 9, '*.dirfd'),
|
|
(0x6191d0, 8, 9, '*.getpwnam'),
|
|
(0x6191d8, 8, 9, '*.__memcpy_chk'),
|
|
(0x6191e0, 8, 9, '*.sigemptyset'),
|
|
(0x6191e8, 8, 9, '*.memcpy'),
|
|
(0x6191f0, 8, 9, '*.getgrnam'),
|
|
(0x6191f8, 8, 9, '*.getfilecon'),
|
|
(0x619200, 8, 9, '*.fileno'),
|
|
(0x619208, 8, 9, '*.tcgetpgrp'),
|
|
(0x619210, 8, 9, '*.__xstat'),
|
|
(0x619218, 8, 9, '*.readdir'),
|
|
(0x619220, 8, 9, '*.wcwidth'),
|
|
(0x619228, 8, 9, '*.malloc'),
|
|
(0x619230, 8, 9, '*.fflush'),
|
|
(0x619238, 8, 9, '*.nl_langinfo'),
|
|
(0x619240, 8, 9, '*.__fxstat'),
|
|
(0x619248, 8, 9, '*.clock_gettime'),
|
|
(0x619250, 8, 9, '*.strcoll'),
|
|
(0x619258, 8, 9, '*.mktime'),
|
|
(0x619260, 8, 9, '*.__freading'),
|
|
(0x619268, 8, 9, '*.fwrite_unlocked'),
|
|
(0x619270, 8, 9, '*.acl_get_entry'),
|
|
(0x619278, 8, 9, '*.realloc'),
|
|
(0x619280, 8, 9, '*.setlocale'),
|
|
(0x619288, 8, 9, '*._obstack_newchunk'),
|
|
(0x619290, 8, 9, '*.__printf_chk'),
|
|
(0x619298, 8, 9, '*.strftime'),
|
|
(0x6192a0, 8, 9, '*.mempcpy'),
|
|
(0x6192a8, 8, 9, '*.memmove'),
|
|
(0x6192b0, 8, 9, '*.error'),
|
|
(0x6192b8, 8, 9, '*.acl_extended_file_nofollow'),
|
|
(0x6192c0, 8, 9, '*.fseeko'),
|
|
(0x6192c8, 8, 9, '*.strtoul'),
|
|
(0x6192d0, 8, 9, '*.__cxa_atexit'),
|
|
(0x6192d8, 8, 9, '*.wcstombs'),
|
|
(0x6192e0, 8, 9, '*.freecon'),
|
|
(0x6192e8, 8, 9, '*.sigismember'),
|
|
(0x6192f0, 8, 9, '*.exit'),
|
|
(0x6192f8, 8, 9, '*.fwrite'),
|
|
(0x619300, 8, 9, '*.__fprintf_chk'),
|
|
(0x619308, 8, 9, '*.fflush_unlocked'),
|
|
(0x619310, 8, 9, '*.mbsinit'),
|
|
(0x619318, 8, 9, '*.iswprint'),
|
|
(0x619320, 8, 9, '*.sigaddset'),
|
|
(0x619328, 8, 9, '*.strstr'),
|
|
(0x619330, 8, 9, '*.__ctype_tolower_loc'),
|
|
(0x619338, 8, 9, '*.__ctype_b_loc'),
|
|
(0x619340, 8, 9, '*.__sprintf_chk'),
|
|
],
|
|
|
|
'exports': [
|
|
(0x401fd0, 0, '_init', 'ls'),
|
|
(0x402040, 0, 'free', 'ls'),
|
|
(0x402450, 0, 'malloc', 'ls'),
|
|
(0x4045a4, 0, '__entry', 'ls'),
|
|
(0x4117f8, 0, '_fini', 'ls'),
|
|
(0x619580, 1, '__progname', 'ls'),
|
|
(0x619580, 1, 'program_invocation_short_name', 'ls'),
|
|
(0x619590, 1, 'stdout', 'ls'),
|
|
(0x6195a0, 1, 'optind', 'ls'),
|
|
(0x6195a8, 1, 'optarg', 'ls'),
|
|
(0x6195b0, 1, '__progname_full', 'ls'),
|
|
(0x6195b0, 1, 'program_invocation_name', 'ls'),
|
|
(0x6195b8, 1, 'stderr', 'ls'),
|
|
],
|
|
|
|
'relocs': [
|
|
],
|
|
|
|
'names': [
|
|
(0x401fd0, 'ls._init'),
|
|
(0x402000, 'ls.plt___ctype_toupper_loc'),
|
|
(0x402010, 'ls.plt_getenv'),
|
|
(0x402020, 'ls.plt_sigprocmask'),
|
|
(0x402030, 'ls.plt_raise'),
|
|
(0x402040, 'ls.plt_free'),
|
|
(0x402050, 'ls.plt_localtime'),
|
|
(0x402060, 'ls.plt___mempcpy_chk'),
|
|
(0x402070, 'ls.plt_abort'),
|
|
(0x402080, 'ls.plt___errno_location'),
|
|
(0x402090, 'ls.plt_strncpy'),
|
|
(0x4020a0, 'ls.plt_strncmp'),
|
|
(0x4020b0, 'ls.plt__exit'),
|
|
(0x4020c0, 'ls.plt_strcpy'),
|
|
(0x4020d0, 'ls.plt___fpending'),
|
|
(0x4020e0, 'ls.plt_isatty'),
|
|
(0x4020f0, 'ls.plt_sigaction'),
|
|
(0x402100, 'ls.plt_iswcntrl'),
|
|
(0x402110, 'ls.plt_wcswidth'),
|
|
(0x402120, 'ls.plt_localeconv'),
|
|
(0x402130, 'ls.plt_mbstowcs'),
|
|
(0x402140, 'ls.plt_readlink'),
|
|
(0x402150, 'ls.plt_textdomain'),
|
|
(0x402160, 'ls.plt_fclose'),
|
|
(0x402170, 'ls.plt_opendir'),
|
|
(0x402180, 'ls.plt_getpwuid'),
|
|
(0x402190, 'ls.plt_bindtextdomain'),
|
|
(0x4021a0, 'ls.plt_stpcpy'),
|
|
(0x4021b0, 'ls.plt_dcgettext'),
|
|
(0x4021c0, 'ls.plt___ctype_get_mb_cur_max'),
|
|
(0x4021d0, 'ls.plt_strlen'),
|
|
(0x4021e0, 'ls.plt___lxstat'),
|
|
(0x4021f0, 'ls.plt___stack_chk_fail'),
|
|
(0x402200, 'ls.plt_getopt_long'),
|
|
(0x402210, 'ls.plt_mbrtowc'),
|
|
(0x402220, 'ls.plt_strchr'),
|
|
(0x402230, 'ls.plt_getgrgid'),
|
|
(0x402240, 'ls.plt__obstack_begin'),
|
|
(0x402250, 'ls.plt___overflow'),
|
|
(0x402260, 'ls.plt_strrchr'),
|
|
(0x402270, 'ls.plt_fgetfilecon'),
|
|
(0x402280, 'ls.plt_lseek'),
|
|
(0x402290, 'ls.plt_gettimeofday'),
|
|
(0x4022a0, 'ls.plt___assert_fail'),
|
|
(0x4022b0, 'ls.plt___strtoul_internal'),
|
|
(0x4022c0, 'ls.plt_fnmatch'),
|
|
(0x4022d0, 'ls.plt_memset'),
|
|
(0x4022e0, 'ls.plt_acl_get_tag_type'),
|
|
(0x4022f0, 'ls.plt_ioctl'),
|
|
(0x402300, 'ls.plt_closedir'),
|
|
(0x402310, 'ls.plt___libc_start_main'),
|
|
(0x402320, 'ls.plt_memcmp'),
|
|
(0x402330, 'ls.plt__setjmp'),
|
|
(0x402340, 'ls.plt_fputs_unlocked'),
|
|
(0x402350, 'ls.plt_calloc'),
|
|
(0x402360, 'ls.plt_lgetfilecon'),
|
|
(0x402370, 'ls.plt_strcmp'),
|
|
(0x402380, 'ls.plt_signal'),
|
|
(0x402390, 'ls.plt_dirfd'),
|
|
(0x4023a0, 'ls.plt_getpwnam'),
|
|
(0x4023b0, 'ls.plt___memcpy_chk'),
|
|
(0x4023c0, 'ls.plt_sigemptyset'),
|
|
(0x4023d0, 'ls.plt_memcpy'),
|
|
(0x4023e0, 'ls.plt_getgrnam'),
|
|
(0x4023f0, 'ls.plt_getfilecon'),
|
|
(0x402400, 'ls.plt_fileno'),
|
|
(0x402410, 'ls.plt_tcgetpgrp'),
|
|
(0x402420, 'ls.plt___xstat'),
|
|
(0x402430, 'ls.plt_readdir'),
|
|
(0x402440, 'ls.plt_wcwidth'),
|
|
(0x402450, 'ls.plt_malloc'),
|
|
(0x402460, 'ls.plt_fflush'),
|
|
(0x402470, 'ls.plt_nl_langinfo'),
|
|
(0x402480, 'ls.plt___fxstat'),
|
|
(0x402490, 'ls.plt_clock_gettime'),
|
|
(0x4024a0, 'ls.plt_strcoll'),
|
|
(0x4024b0, 'ls.plt_mktime'),
|
|
(0x4024c0, 'ls.plt___freading'),
|
|
(0x4024d0, 'ls.plt_fwrite_unlocked'),
|
|
(0x4024e0, 'ls.plt_acl_get_entry'),
|
|
(0x4024f0, 'ls.plt_realloc'),
|
|
(0x402500, 'ls.plt_setlocale'),
|
|
(0x402510, 'ls.plt__obstack_newchunk'),
|
|
(0x402520, 'ls.plt___printf_chk'),
|
|
(0x402530, 'ls.plt_strftime'),
|
|
(0x402540, 'ls.plt_mempcpy'),
|
|
(0x402550, 'ls.plt_memmove'),
|
|
(0x402560, 'ls.plt_error'),
|
|
(0x402570, 'ls.plt_acl_extended_file_nofollow'),
|
|
(0x402580, 'ls.plt_fseeko'),
|
|
(0x402590, 'ls.plt_strtoul'),
|
|
(0x4025a0, 'ls.plt___cxa_atexit'),
|
|
(0x4025b0, 'ls.plt_wcstombs'),
|
|
(0x4025c0, 'ls.plt_freecon'),
|
|
(0x4025d0, 'ls.plt_sigismember'),
|
|
(0x4025e0, 'ls.plt_exit'),
|
|
(0x4025f0, 'ls.plt_fwrite'),
|
|
(0x402600, 'ls.plt___fprintf_chk'),
|
|
(0x402610, 'ls.plt_fflush_unlocked'),
|
|
(0x402620, 'ls.plt_mbsinit'),
|
|
(0x402630, 'ls.plt_iswprint'),
|
|
(0x402640, 'ls.plt_sigaddset'),
|
|
(0x402650, 'ls.plt_strstr'),
|
|
(0x402660, 'ls.plt___ctype_tolower_loc'),
|
|
(0x402670, 'ls.plt___ctype_b_loc'),
|
|
(0x402680, 'ls.plt___sprintf_chk'),
|
|
(0x4045a4, 'ls.__entry'),
|
|
(0x4117f8, 'ls._fini'),
|
|
(0x618fd8, '*.__gmon_start___00618fd8'),
|
|
(0x619000, '*.__ctype_toupper_loc_00619000'),
|
|
(0x619008, '*.getenv_00619008'),
|
|
(0x619010, '*.sigprocmask_00619010'),
|
|
(0x619018, '*.raise_00619018'),
|
|
(0x619020, '*.free_00619020'),
|
|
(0x619028, '*.localtime_00619028'),
|
|
(0x619030, '*.__mempcpy_chk_00619030'),
|
|
(0x619038, '*.abort_00619038'),
|
|
(0x619040, '*.__errno_location_00619040'),
|
|
(0x619048, '*.strncpy_00619048'),
|
|
(0x619050, '*.strncmp_00619050'),
|
|
(0x619058, '*._exit_00619058'),
|
|
(0x619060, '*.strcpy_00619060'),
|
|
(0x619068, '*.__fpending_00619068'),
|
|
(0x619070, '*.isatty_00619070'),
|
|
(0x619078, '*.sigaction_00619078'),
|
|
(0x619080, '*.iswcntrl_00619080'),
|
|
(0x619088, '*.wcswidth_00619088'),
|
|
(0x619090, '*.localeconv_00619090'),
|
|
(0x619098, '*.mbstowcs_00619098'),
|
|
(0x6190a0, '*.readlink_006190a0'),
|
|
(0x6190a8, '*.textdomain_006190a8'),
|
|
(0x6190b0, '*.fclose_006190b0'),
|
|
(0x6190b8, '*.opendir_006190b8'),
|
|
(0x6190c0, '*.getpwuid_006190c0'),
|
|
(0x6190c8, '*.bindtextdomain_006190c8'),
|
|
(0x6190d0, '*.stpcpy_006190d0'),
|
|
(0x6190d8, '*.dcgettext_006190d8'),
|
|
(0x6190e0, '*.__ctype_get_mb_cur_max_006190e0'),
|
|
(0x6190e8, '*.strlen_006190e8'),
|
|
(0x6190f0, '*.__lxstat_006190f0'),
|
|
(0x6190f8, '*.__stack_chk_fail_006190f8'),
|
|
(0x619100, '*.getopt_long_00619100'),
|
|
(0x619108, '*.mbrtowc_00619108'),
|
|
(0x619110, '*.strchr_00619110'),
|
|
(0x619118, '*.getgrgid_00619118'),
|
|
(0x619120, '*._obstack_begin_00619120'),
|
|
(0x619128, '*.__overflow_00619128'),
|
|
(0x619130, '*.strrchr_00619130'),
|
|
(0x619138, '*.fgetfilecon_00619138'),
|
|
(0x619140, '*.lseek_00619140'),
|
|
(0x619148, '*.gettimeofday_00619148'),
|
|
(0x619150, '*.__assert_fail_00619150'),
|
|
(0x619158, '*.__strtoul_internal_00619158'),
|
|
(0x619160, '*.fnmatch_00619160'),
|
|
(0x619168, '*.memset_00619168'),
|
|
(0x619170, '*.acl_get_tag_type_00619170'),
|
|
(0x619178, '*.ioctl_00619178'),
|
|
(0x619180, '*.closedir_00619180'),
|
|
(0x619188, '*.__libc_start_main_00619188'),
|
|
(0x619190, '*.memcmp_00619190'),
|
|
(0x619198, '*._setjmp_00619198'),
|
|
(0x6191a0, '*.fputs_unlocked_006191a0'),
|
|
(0x6191a8, '*.calloc_006191a8'),
|
|
(0x6191b0, '*.lgetfilecon_006191b0'),
|
|
(0x6191b8, '*.strcmp_006191b8'),
|
|
(0x6191c0, '*.signal_006191c0'),
|
|
(0x6191c8, '*.dirfd_006191c8'),
|
|
(0x6191d0, '*.getpwnam_006191d0'),
|
|
(0x6191d8, '*.__memcpy_chk_006191d8'),
|
|
(0x6191e0, '*.sigemptyset_006191e0'),
|
|
(0x6191e8, '*.memcpy_006191e8'),
|
|
(0x6191f0, '*.getgrnam_006191f0'),
|
|
(0x6191f8, '*.getfilecon_006191f8'),
|
|
(0x619200, '*.fileno_00619200'),
|
|
(0x619208, '*.tcgetpgrp_00619208'),
|
|
(0x619210, '*.__xstat_00619210'),
|
|
(0x619218, '*.readdir_00619218'),
|
|
(0x619220, '*.wcwidth_00619220'),
|
|
(0x619228, '*.malloc_00619228'),
|
|
(0x619230, '*.fflush_00619230'),
|
|
(0x619238, '*.nl_langinfo_00619238'),
|
|
(0x619240, '*.__fxstat_00619240'),
|
|
(0x619248, '*.clock_gettime_00619248'),
|
|
(0x619250, '*.strcoll_00619250'),
|
|
(0x619258, '*.mktime_00619258'),
|
|
(0x619260, '*.__freading_00619260'),
|
|
(0x619268, '*.fwrite_unlocked_00619268'),
|
|
(0x619270, '*.acl_get_entry_00619270'),
|
|
(0x619278, '*.realloc_00619278'),
|
|
(0x619280, '*.setlocale_00619280'),
|
|
(0x619288, '*._obstack_newchunk_00619288'),
|
|
(0x619290, '*.__printf_chk_00619290'),
|
|
(0x619298, '*.strftime_00619298'),
|
|
(0x6192a0, '*.mempcpy_006192a0'),
|
|
(0x6192a8, '*.memmove_006192a8'),
|
|
(0x6192b0, '*.error_006192b0'),
|
|
(0x6192b8, '*.acl_extended_file_nofollow_006192b8'),
|
|
(0x6192c0, '*.fseeko_006192c0'),
|
|
(0x6192c8, '*.strtoul_006192c8'),
|
|
(0x6192d0, '*.__cxa_atexit_006192d0'),
|
|
(0x6192d8, '*.wcstombs_006192d8'),
|
|
(0x6192e0, '*.freecon_006192e0'),
|
|
(0x6192e8, '*.sigismember_006192e8'),
|
|
(0x6192f0, '*.exit_006192f0'),
|
|
(0x6192f8, '*.fwrite_006192f8'),
|
|
(0x619300, '*.__fprintf_chk_00619300'),
|
|
(0x619308, '*.fflush_unlocked_00619308'),
|
|
(0x619310, '*.mbsinit_00619310'),
|
|
(0x619318, '*.iswprint_00619318'),
|
|
(0x619320, '*.sigaddset_00619320'),
|
|
(0x619328, '*.strstr_00619328'),
|
|
(0x619330, '*.__ctype_tolower_loc_00619330'),
|
|
(0x619338, '*.__ctype_b_loc_00619338'),
|
|
(0x619340, '*.__sprintf_chk_00619340'),
|
|
(0x619580, 'ls.program_invocation_short_name'),
|
|
(0x619590, 'ls.stdout'),
|
|
(0x6195a0, 'ls.optind'),
|
|
(0x6195a8, 'ls.optarg'),
|
|
(0x6195b0, 'ls.__progname_full'),
|
|
(0x6195b8, 'ls.stderr'),
|
|
],
|
|
|
|
'pltgot': [
|
|
],
|
|
|
|
}
|