> On Apr 8, 2021, at 2:07 PM, Marvin Häuser <mhaeu...@posteo.de> wrote: > > > 08.04.2021 19:39:16 Andrew Fish <af...@apple.com <mailto:af...@apple.com>>: > >> >> >>> On Apr 8, 2021, at 10:02 AM, Marvin Häuser <mhaeu...@posteo.de> wrote: >>> >>> On 08.04.21 18:44, Andrew Fish via groups.io wrote: >>>> >>>> >>>>> On Apr 8, 2021, at 9:06 AM, Marvin Häuser <mhaeu...@posteo.de >>>>> <mailto:mhaeu...@posteo.de>> wrote: >>>>> >>>>> We use the loader code in userspace anyway for fuzzing and such. I also >>>>> want to build a database of all sorts of UEFI binaries some time before >>>>> the merge to confirm they are all accepted (Windows / macOS / Linux >>>>> bootloaders, tools like memtest, drivers like iPXE). As part of that, I'm >>>>> sure we can have a userspace tool that uses the code to emit parsing >>>>> information. >>>>> >>>>> But as the EDK II build system is very... not so userspace friendly, I >>>>> will not promise it will be very nice. :) >>>>> >>>> >>>> Marvin, >>>> >>>> The BaseTools can easily build C command line tools that are cross >>>> platform? >>>> >>>> Actually GenFw [1] already does a lot of PE/COFF magic, so it should be >>>> relatively easy to add a -I, —info, and dump out an overview of a PE/COFF >>>> image, and make comments on things that are not secure. It would also >>>> probably be useful to dump out information about the Debug Directory >>>> entries, His sections, etc. for general debug. >>> >>> I did not look at the code much, but I do know that BaseTools duplicates >>> the PE/COFF code from MdePkg. Whether it was changed or not I cannot tell. >>> >> >> GenFw does the ELF to PE/COFF conversion, zeroing out Debug Directory >> Entries etc. so it should be correct. It is not like the PE/COFF spec is a >> moving target. > > > PE is not a moving target, but EDK II is. The fact that even old and proven > code sometimes needs maintanance is evidental from the proposal and its so > far positive feedback. I'm not ready to duplicate code, I'd rather take the > utilities out of the current scope and discuss ways to consume MdePkg > libraries later. In fact, I want to reduce code duplication as a "free > benefit" from the changes, especially image hashing. >
Marvin, I was thinking more about tooling to introspect PE/COFF images. Trying to consolidate the BaseTools to use the common edk2 libraries would be doable, but I agree that is a separate project. The inspection tool feature could be a separate project too. > I know it takes time, but I think it will be worth it. We have been debugging > and fuzztesting our EDK II packages in userland for a while, and found it to > be a great help. I hope you will agree. :) > Yea I’ve build emulators before that are just native OS C applications and they pull in the edk2 libs, not the BaseTools libs and it makes things like fuzzing much easier. Have a project to have only one validated PE/COFF lib seems very reasonable, I guess a lot of us are too trusting of our build servers. Thanks, Andrew Fish > Best regards, > Marvin > >> >> Thanks, >> >> Andrew Fish >> >>> Best regards, >>> Marvin >>> >>>> >>>> [1] https://github.com/tianocore/edk2/tree/master/BaseTools/Source/C/GenFw >>>> <https://github.com/tianocore/edk2/tree/master/BaseTools/Source/C/GenFw> >>>> /Volumes/Case/edk2-github(eng/PR-557-XcodeResourceSections)>. edksetup.sh >>>> Loading previous configuration from >>>> /Volumes/Case/edk2-github/Conf/BuildEnv.sh >>>> WORKSPACE: /Volumes/Case/edk2-github >>>> EDK_TOOLS_PATH: /Volumes/Case/edk2-github/BaseTools >>>> CONF_PATH: /Volumes/Case/edk2-github/Conf >>>> /Volumes/Case/edk2-github(eng/PR-557-XcodeResourceSections)>GenFw -h >>>> GenFw Version 0.2 Developer Build based on Revision: Unknown >>>> >>>> Usage: GenFw [options] <input_file> >>>> >>>> Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved. >>>> >>>> Options: >>>> -o FileName, --outputfile FileName >>>> File will be created to store the output content. >>>> -e EFI_FILETYPE, --efiImage EFI_FILETYPE >>>> Create Efi Image. EFI_FILETYPE is one of >>>> BASE,SMM_CORE, >>>> PEI_CORE, PEIM, DXE_CORE, DXE_DRIVER, >>>> UEFI_APPLICATION, >>>> SEC, DXE_SAL_DRIVER, UEFI_DRIVER, >>>> DXE_RUNTIME_DRIVER, >>>> DXE_SMM_DRIVER, SECURITY_CORE, >>>> COMBINED_PEIM_DRIVER, >>>> MM_STANDALONE, MM_CORE_STANDALONE, >>>> PIC_PEIM, RELOCATABLE_PEIM, BS_DRIVER, RT_DRIVER, >>>> APPLICATION, SAL_RT_DRIVER to support all module >>>> types >>>> It can only be used together with >>>> --keepexceptiontable, >>>> --keepzeropending, --keepoptionalheader, -r, -o >>>> option. >>>> It is a action option. If it is combined with >>>> other action options, >>>> the later input action option will override the >>>> previous one. >>>> -c, --acpi Create Acpi table. >>>> It can't be combined with other action options >>>> except for -o, -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -t, --terse Create Te Image. >>>> It can only be used together with >>>> --keepexceptiontable, >>>> --keepzeropending, --keepoptionalheader, -r, -o >>>> option. >>>> It is a action option. If it is combined with >>>> other action options, >>>> the later input action option will override the >>>> previous one. >>>> -u, --dump Dump TeImage Header. >>>> It can't be combined with other action options >>>> except for -o, -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -z, --zero Zero the Debug Data Fields in the PE input image >>>> file. >>>> It also zeros the time stamp fields. >>>> This option can be used to compare the binary efi >>>> image. >>>> It can't be combined with other action options >>>> except for -o, -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -b, --exe2bin Convert the input EXE to the output BIN file. >>>> It can't be combined with other action options >>>> except for -o, -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -l, --stripped Strip off the relocation info from PE or TE image. >>>> It can't be combined with other action options >>>> except for -o, -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -s timedate, --stamp timedate >>>> timedate format is "yyyy-mm-dd 00:00:00". if >>>> timedata >>>> is set to NOW, current system time is used. The >>>> support >>>> date scope is 1970-01-01 00+timezone:00:00 >>>> ~ 2038-01-19 03+timezone:14:07 >>>> The scope is adjusted according to the different >>>> zones. >>>> It can't be combined with other action options >>>> except for -o, -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -m, --mcifile Convert input microcode txt file to microcode bin >>>> file. >>>> It can't be combined with other action options >>>> except for -o option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -j, --join Combine multi microcode bin files to one file. >>>> It can be specified with -a, -p, -o option. >>>> No other options can be combined with it. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -a NUM, --align NUM NUM is one HEX or DEC format alignment value. >>>> This option is only used together with -j option. >>>> -p NUM, --pad NUM NUM is one HEX or DEC format padding value. >>>> This option is only used together with -j option. >>>> --keepexceptiontable Don't clear exception table. >>>> This option can be used together with -e or -t. >>>> It doesn't work for other options. >>>> --keepoptionalheader Don't zero PE/COFF optional header fields. >>>> This option can be used together with -e or -t. >>>> It doesn't work for other options. >>>> --keepzeropending Don't strip zero pending of .reloc. >>>> This option can be used together with -e or -t. >>>> It doesn't work for other options. >>>> -r, --replace Overwrite the input file with the output content. >>>> If more input files are specified, >>>> the last input file will be as the output file. >>>> -g HiiPackageListGuid, --hiiguid HiiPackageListGuid >>>> Guid is used to specify hii package list guid. >>>> Its format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx >>>> If not specified, the first Form FormSet guid is >>>> used. >>>> --hiipackage Combine all input binary hii packages into >>>> a single package list as the text resource >>>> data(RC). >>>> It can't be combined with other action options >>>> except for -o option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> --hiibinpackage Combine all input binary hii packages into >>>> a single package list as the binary resource >>>> section. >>>> It can't be combined with other action options >>>> except for -o option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> --rc FlieName Append a Hii resource section to the >>>> last PE/COFF section. The FileName is the resource >>>> section to append >>>> If FileName does not exist this operation is >>>> skipped. This feature is >>>> only intended for toolchains, like XCODE, that >>>> don't suport $(RC). >>>> This option can only be combined with -e >>>> --rebase NewAddress Rebase image to new base address. New address >>>> is also set to the first none code section header. >>>> It can't be combined with other action options >>>> except for -o or -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> --address NewAddress Set new address into the first none code >>>> section header of the input image. >>>> It can't be combined with other action options >>>> except for -o or -r option. It is a action option. >>>> If it is combined with other action options, the >>>> later >>>> input action option will override the previous one. >>>> -v, --verbose Turn on verbose output with informational messages. >>>> -q, --quiet Disable all messages except key message and fatal >>>> error >>>> -d, --debug level Enable debug messages, at input debug level. >>>> --version Show program's version number and exit >>>> -h, --help Show this help message and exit >>>> >>>> Thanks, >>>> >>>> Andrew Fish >>>> >>>>> Best regards, >>>>> Marvin >>>>> >>>>> On 08.04.21 16:13, Andrew (EFI) Fish wrote: >>>>>> At a minimum it would be nice if we had a tool that would point out the >>>>>> security faults with a given PE/COFF file layout. >>>>>> >>>>>> >>>>>> >>>>>>> … >>>>> >>>>> >>>>> >>>> >>>> >>> > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#73884): https://edk2.groups.io/g/devel/message/73884 Mute This Topic: https://groups.io/mt/81853302/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-