https://sourceware.org/bugzilla/show_bug.cgi?id=30145
--- Comment #3 from Pali Rohár <pali at kernel dot org> --- Ok, I have tested objcopy --set-section-flags on PE executable. Seems that it is doing something, but only for some of the flags and I really do not understand what it is doing. For me it looks like that objcopy --set-section-flags sets random IMAGE_SCN_* characteristics... Here is my test case and output from readpe after setting every flag via objcopy --set-section-flags on simple PE executable with custom section my_sect: $ cat test-section-flags.c __attribute__((section("my_sect"))) int val = 10; int my_entry(void) { return val; } $ x86_64-w64-mingw32-gcc -Wall -Wextra -nostartfiles -nodefaultlibs -nostdlib -e my_entry test-section-flags.c -o test-section-flags.exe $ readpe test-section-flags.exe 2>/dev/null | grep -A 11 my_sect Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000040 Characteristic Names IMAGE_SCN_CNT_INITIALIZED_DATA IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section $ for flag in alloc load noload readonly debug code data rom exclude share contents merge strings; do echo "Flags: $flag"; x86_64-w64-mingw32-objcopy --set-section-flags my_sect=$flag test-section-flags.exe test-section-flags-new.exe && readpe test-section-flags-new.exe 2>/dev/null | grep -A 12 my_sect; echo; done Flags: alloc Name: my_sect Virtual Size: 0x200 (512 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0 (0 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000080 Characteristic Names IMAGE_SCN_CNT_UNINITIALIZED_DATA IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Flags: load Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000000 Characteristic Names IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Virtual Size: 0x20 (32 bytes) Flags: noload Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc2000000 Characteristic Names IMAGE_SCN_MEM_DISCARDABLE IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Flags: readonly Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0x40000000 Characteristic Names IMAGE_SCN_MEM_READ Section Name: .rdata Virtual Size: 0x20 (32 bytes) Virtual Address: 0x3000 Flags: debug Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc2000040 Characteristic Names IMAGE_SCN_CNT_INITIALIZED_DATA IMAGE_SCN_MEM_DISCARDABLE IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Flags: code Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xe0000020 Characteristic Names IMAGE_SCN_CNT_CODE IMAGE_SCN_MEM_EXECUTE IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Flags: data Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000040 Characteristic Names IMAGE_SCN_CNT_INITIALIZED_DATA IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Flags: rom Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000000 Characteristic Names IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Virtual Size: 0x20 (32 bytes) Flags: exclude Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc2000000 Characteristic Names IMAGE_SCN_MEM_DISCARDABLE IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Flags: share Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xd0000000 Characteristic Names IMAGE_SCN_MEM_SHARED IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Flags: contents Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000000 Characteristic Names IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Virtual Size: 0x20 (32 bytes) Flags: merge Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000000 Characteristic Names IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Virtual Size: 0x20 (32 bytes) Flags: strings Name: my_sect Virtual Size: 0x4 (4 bytes) Virtual Address: 0x2000 Size Of Raw Data: 0x200 (512 bytes) Pointer To Raw Data: 0x600 Number Of Relocations: 0 Characteristics: 0xc0000000 Characteristic Names IMAGE_SCN_MEM_READ IMAGE_SCN_MEM_WRITE Section Name: .rdata Virtual Size: 0x20 (32 bytes) This --set-section-flags objcopy option should be properly documented for every flag, what it is doing with PE executable, because from above output I'm really not sure. Now I remember that in past I was trying to set IMAGE_SCN_MEM_DISCARDABLE via objcopy 2.31.1 and none of flags was able to do it (neither noload). But with objcopy 2.39 it is possible via noload flag. So... this --set-section-flags option looks like a good starting point for setting section flags. Just it needs documentation and fixing/extending it for other PE IMAGE_SCN_* flags. And important is also ability to set or clear just one particular flag, because currently --set-section-flags can just replace all existing flags by a new flags specified in the command line option. -- You are receiving this mail because: You are on the CC list for the bug.