Re: A Famous Security Bug

Liste des GroupesRevenir à cl c 
Sujet : Re: A Famous Security Bug
De : bc (at) *nospam* freeuk.com (bart)
Groupes : comp.lang.c
Date : 25. Mar 2024, 17:06:24
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <uts7e0$1686i$1@dont-email.me>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14
User-Agent : Mozilla Thunderbird
On 25/03/2024 12:26, David Brown wrote:
On 25/03/2024 12:16, Michael S wrote:
On Sun, 24 Mar 2024 23:43:32 +0100
David Brown <david.brown@hesbynett.no> wrote:
>
I could be  wrong here, of course.
>
>
It seems, you are.
>
 It happens - and it was not unexpected here, as I said.  I don't have all these compilers installed to test.
 But it would be helpful if you had a /little/ more information.  If you don't know why some compilers generate binaries that have memory mapped at 0x400000, and others do not, fair enough.  I am curious, but it's not at all important.
 
In the PE EXE format, the default image load base is specified in a special header in the file:
   Magic:            20B
   Link version:     1.0
   Code size:        512 200
   Idata size:       1024 400
   Zdata size:       512
   Entry point:      4096 1000 in data:0
   Code base:        4096
   Image base:       4194304 400000
   Section align:    4096
By convention it is at 0x40'0000 (I've no idea why).
More recently, dynamic loading, regardless of what it says in the PE header, has become popular with linkers. So, while there is still a fixed value in the Image Base file, which might be 0x140000000, it gets loaded at some random address, usually in high memory above 2GB.
I don't know what's responsible for that, but presumably the OS must be in on the act.
To make this possible, both for loading above 2GB, and for loading at an address not known by the linker, the code inside the EXE must be position-independent, and have relocation info for any absolute 64-bit static addresses. 32-bit static addresses won't work.
If I take this C program:
     #include <stdio.h>
     int main(void) {
         printf("%p\n", main);
     }
This shows 0000000000401000 when compiled with mcc or tcc, or 0000000000401020 with lccwin32 (the exact address of 'main' relative to the image base will vary). With DMC (32 bits) it's 0040210. All load at 0x400000.
With gcc, it shows: 00007ff6e63a1591.
Dynamic loading can be disabled by passing --disable-dynamicbase to ld, then it might show something like 0000000140001000, which corresponds to the default Image Base file in the EXE header
Not dynamic, but still high.
(My compilers, both for C and M, did not generate code suitable for high-loading until a few months ago. That didn't matter since the EXEs loaded at the fixed 0x400000 adddress. But it can matter for DLL files and will do for OBJ files, since the latter would need to use an external linker.
So if I do this with a mix of mcc and gcc:
   C:\c>mcc test -c
   Compiling test.c to test.obj
   C:\c>gcc test.obj
   C:\c>a
   00007FF613311540
I get the same high-loaded address. I don't think that Tiny C has that support yet for high-loading code.)
To summarise: the high-loading is not directly to do with compilers, but the program that generates the EXE. But the compiler does need to generate code that could be loaded high if needed.

Date Sujet#  Auteur
22 Mar 24 * Re: A Famous Security Bug52James Kuyper
22 Mar 24 `* Re: A Famous Security Bug51bart
23 Mar 24  +* Re: A Famous Security Bug5Keith Thompson
23 Mar 24  i`* Re: A Famous Security Bug4Kaz Kylheku
23 Mar 24  i `* Re: A Famous Security Bug3David Brown
23 Mar 24  i  `* Re: A Famous Security Bug2bart
24 Mar 24  i   `- Re: A Famous Security Bug1David Brown
23 Mar 24  `* Re: A Famous Security Bug45James Kuyper
23 Mar 24   `* Re: A Famous Security Bug44bart
23 Mar 24    +* Re: A Famous Security Bug37David Brown
23 Mar 24    i`* Re: A Famous Security Bug36bart
24 Mar 24    i +* Re: A Famous Security Bug29David Brown
24 Mar 24    i i`* Re: A Famous Security Bug28bart
24 Mar 24    i i +* Re: A Famous Security Bug12Keith Thompson
24 Mar 24    i i i+- Re: A Famous Security Bug1David Brown
24 Mar 24    i i i+* Re: A Famous Security Bug3Michael S
25 Mar 24    i i ii+- Re: A Famous Security Bug1David Brown
25 Mar 24    i i ii`- Re: A Famous Security Bug1Keith Thompson
25 Mar 24    i i i`* Re: A Famous Security Bug7bart
25 Mar 24    i i i `* Re: A Famous Security Bug6Michael S
25 Mar 24    i i i  +* Re: A Famous Security Bug4bart
25 Mar 24    i i i  i`* Re: A Famous Security Bug3David Brown
25 Mar 24    i i i  i `* Re: A Famous Security Bug2Malcolm McLean
25 Mar 24    i i i  i  `- Re: A Famous Security Bug1Michael S
25 Mar 24    i i i  `- Re: A Famous Security Bug1David Brown
24 Mar 24    i i `* Re: A Famous Security Bug15David Brown
25 Mar 24    i i  `* Re: A Famous Security Bug14Michael S
25 Mar 24    i i   `* Re: A Famous Security Bug13David Brown
25 Mar 24    i i    +* Re: A Famous Security Bug3Michael S
25 Mar 24    i i    i+- Re: A Famous Security Bug1David Brown
25 Mar 24    i i    i`- Re: A Famous Security Bug1bart
25 Mar 24    i i    `* Re: A Famous Security Bug9bart
25 Mar 24    i i     +* Re: A Famous Security Bug7Michael S
25 Mar 24    i i     i`* Re: A Famous Security Bug6bart
25 Mar 24    i i     i +- Re: A Famous Security Bug1David Brown
25 Mar 24    i i     i `* Re: A Famous Security Bug4Michael S
25 Mar 24    i i     i  `* Re: A Famous Security Bug3bart
26 Mar 24    i i     i   `* Re: A Famous Security Bug2Michael S
26 Mar 24    i i     i    `- Re: A Famous Security Bug1bart
25 Mar 24    i i     `- Re: A Famous Security Bug1David Brown
24 Mar 24    i `* Re: A Famous Security Bug6Michael S
24 Mar 24    i  `* Re: A Famous Security Bug5bart
25 Mar 24    i   +* Re: A Famous Security Bug2Michael S
25 Mar 24    i   i`- Re: A Famous Security Bug1Michael S
25 Mar 24    i   +- Re: A Famous Security Bug1David Brown
28 Mar 24    i   `- Re: A Famous Security Bug1James Kuyper
23 Mar 24    +- Re: A Famous Security Bug1Tim Rentsch
24 Mar 24    +- Re: A Famous Security Bug1Michael S
24 Mar 24    +* Re: A Famous Security Bug3Michael S
24 Mar 24    i`* Re: A Famous Security Bug2bart
24 Mar 24    i `- Re: A Famous Security Bug1Michael S
28 Mar 24    `- Re: A Famous Security Bug1James Kuyper

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal