@@ -506,106 +506,43 @@ def handle_q(subcmd):
506506 elif subcmd .startswith ('Xfer:auxv:read::' ):
507507 if self .ql .code :
508508 return
509- if self .ql .ostype in (QL_OS .LINUX , QL_OS .FREEBSD ) :
510- if self .ql .archbit == 64 :
511- ANNEX = "00000000000000"
512- AT_SYSINFO_EHDR = "0000000000000000" # System-supplied DSO's ELF header
513- ID_AT_HWCAP = "1000000000000000"
514- ID_AT_PAGESZ = "0600000000000000"
515- ID_AT_CLKTCK = "1100000000000000"
516- AT_CLKTCK = "6400000000000000" # Frequency of times() 100
517- ID_AT_PHDR = "0300000000000000"
518- ID_AT_PHENT = "0400000000000000"
519- ID_AT_PHNUM = "0500000000000000"
520- ID_AT_BASE = "0700000000000000"
521- ID_AT_FLAGS = "0800000000000000"
522- ID_AT_ENTRY = "0900000000000000"
523- ID_AT_UID = "0b00000000000000"
524- ID_AT_EUID = "0c00000000000000"
525- ID_AT_GID = "0d00000000000000"
526- ID_AT_EGID = "0e00000000000000"
527- ID_AT_SECURE = "1700000000000000"
528- AT_SECURE = "0000000000000000"
529- ID_AT_RANDOM = "1900000000000000"
530- ID_AT_HWCAP2 = "1a00000000000000"
531- AT_HWCAP2 = "0000000000000000"
532- ID_AT_EXECFN = "1f00000000000000"
533- AT_EXECFN = "0000000000000000" # File name of executable
534- ID_AT_PLATFORM = "0f00000000000000"
535- ID_AT_NULL = "0000000000000000"
536- AT_NULL = "0000000000000000"
537-
538- elif self .ql .archbit == 32 :
539- ANNEX = "000000"
540- AT_SYSINFO_EHDR = "00000000" # System-supplied DSO's ELF header
541- ID_AT_HWCAP = "10000000"
542- ID_AT_PAGESZ = "06000000"
543- ID_AT_CLKTCK = "11000000"
544- AT_CLKTCK = "64000000" # Frequency of times() 100
545- ID_AT_PHDR = "03000000"
546- ID_AT_PHENT = "04000000"
547- ID_AT_PHNUM = "05000000"
548- ID_AT_BASE = "07000000"
549- ID_AT_FLAGS = "08000000"
550- ID_AT_ENTRY = "09000000"
551- ID_AT_UID = "0b000000"
552- ID_AT_EUID = "0c000000"
553- ID_AT_GID = "0d000000"
554- ID_AT_EGID = "0e000000"
555- ID_AT_SECURE = "17000000"
556- AT_SECURE = "00000000"
557- ID_AT_RANDOM = "19000000"
558- ID_AT_HWCAP2 = "1a000000"
559- AT_HWCAP2 = "00000000"
560- ID_AT_EXECFN = "1f000000"
561- AT_EXECFN = "00000000" # File name of executable
562- ID_AT_PLATFORM = "0f000000"
563- ID_AT_NULL = "00000000"
564- AT_NULL = "00000000"
565-
566- AT_HWCAP = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_HWCAP ]) # mock cpuid 0x1f8bfbff
567- AT_PAGESZ = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_PAGESZ ]) # System page size, fixed in qiling
568- AT_PHDR = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_PHDR ]) # Program headers for program
569- AT_PHENT = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_PHENT ]) # Size of program header entry
570- AT_PHNUM = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_PHNUM ]) # Number of program headers
571- AT_BASE = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_BASE ]) # Base address of interpreter
572- AT_FLAGS = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_FLAGS ])
573- AT_ENTRY = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_ENTRY ]) # Entry point of program
574- AT_UID = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_UID ]) # UID from ql.profile
575- AT_EUID = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_EUID ]) # UID from ql.profile
576- AT_GID = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_GID ]) # UID from ql.profile
577- AT_EGID = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_EGID ]) # UID from ql.profile
578- AT_RANDOM = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_RANDOM ]) # Address of 16 random bytes
579- AT_PLATFORM = self .addr_to_str (self .ql .loader .aux_vec [AUX .AT_PLATFORM ]) # String identifying platform
580-
581- auxvdata_c = (
582- ANNEX + AT_SYSINFO_EHDR +
583- ID_AT_HWCAP + AT_HWCAP +
584- ID_AT_PAGESZ + AT_PAGESZ +
585- ID_AT_CLKTCK + AT_CLKTCK +
586- ID_AT_PHDR + AT_PHDR +
587- ID_AT_PHENT + AT_PHENT +
588- ID_AT_PHNUM + AT_PHNUM +
589- ID_AT_BASE + AT_BASE +
590- ID_AT_FLAGS + AT_FLAGS +
591- ID_AT_ENTRY + AT_ENTRY +
592- ID_AT_UID + AT_UID +
593- ID_AT_EUID + AT_EUID +
594- ID_AT_GID + AT_GID +
595- ID_AT_EGID + AT_EGID +
596- ID_AT_SECURE + AT_SECURE +
597- ID_AT_RANDOM + AT_RANDOM +
598- ID_AT_HWCAP2 + AT_HWCAP2 +
599- ID_AT_EXECFN + AT_EXECFN +
600- ID_AT_PLATFORM + AT_PLATFORM +
601- ID_AT_NULL + AT_NULL
602- )
603-
604- auxvdata = self .bin_to_escstr (unhexlify (auxvdata_c ))
605- #self.send(b'l!%s' % auxvdata)
509+
510+ if self .ql .ostype in (QL_OS .LINUX , QL_OS .FREEBSD ):
511+ def __read_auxv () -> Iterator [int ]:
512+ auxv_entries = (
513+ AUX .AT_HWCAP ,
514+ AUX .AT_PAGESZ ,
515+ AUX .AT_CLKTCK ,
516+ AUX .AT_PHDR ,
517+ AUX .AT_PHENT ,
518+ AUX .AT_PHNUM ,
519+ AUX .AT_BASE ,
520+ AUX .AT_FLAGS ,
521+ AUX .AT_ENTRY ,
522+ AUX .AT_UID ,
523+ AUX .AT_EUID ,
524+ AUX .AT_GID ,
525+ AUX .AT_EGID ,
526+ AUX .AT_SECURE ,
527+ AUX .AT_RANDOM ,
528+ AUX .AT_HWCAP2 ,
529+ AUX .AT_EXECFN ,
530+ AUX .AT_PLATFORM ,
531+ AUX .AT_NULL
532+ )
533+
534+ for e in auxv_entries :
535+ yield e .value
536+ yield self .ql .loader .aux_vec [e ]
537+
538+ annex = self .addr_to_str (0 )[:- 2 ]
539+ sysinfo_ehdr = self .addr_to_str (0 )
540+
541+ auxvdata_c = unhexlify ('' .join ([annex , sysinfo_ehdr ] + [self .addr_to_str (val ) for val in __read_auxv ()]))
542+ auxvdata = self .bin_to_escstr (auxvdata_c )
606543 else :
607544 auxvdata = b""
608-
545+
609546 self .send (b'l!%s' % auxvdata )
610547
611548 elif subcmd .startswith ('Xfer:exec-file:read:' ):
0 commit comments