comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Pascal Calling Convention
Date: Wed, 30 Mar 2011 14:40:14 -0500
Date: 2011-03-30T14:40:14-05:00	[thread overview]
Message-ID: <in00v1$nmc$1@munin.nbi.dk> (raw)
In-Reply-To: wccei5o233l.fsf@shell01.TheWorld.com

"Robert A Duff" <bobduff@shell01.TheWorld.com> wrote in message 
news:wccei5o233l.fsf@shell01.TheWorld.com...
> "Randy Brukardt" <randy@rrsoftware.com> writes:
>
>> 99% of the time, executing data is a bug. Why allow it by default?
>
> Ah, I didn't realize you were mainly focused on that issue.
> I agree 100% that executing data is usually a bug, and should
> be prevented by default.
>
> But you don't need segments for that.  Paging hardware can do it.
> (Well, you don't need segments in hardware.  The O.S. concocts
> something like "segments" based on paging.  And protects code.)

True enough, but I was focused primarily on the existing capabilities of the 
80386 (which is the CPU that most of the current OSes started on). This chip 
had segments with the "right" permissions, while the paging stuff had little 
permission control. (And no OS or OS extension that I know of in that time 
frame used that permission control.)

Also, I think there is a (minor) advantage to separate code and data address 
spaces, in that makes it harder still to do something that fools the OS into 
executing data. If you have no executable access to the data address space, 
there is no possible bug that would allow data execution.

In any event, this was completely obvious to me even back in the days of the 
DOS Extender. All of the DOS Extenders gave you a totally flat address 
space, but they all also had a way to get a new segment. So I had Janus/Ada 
create a stub data segment in the executable file, and the first thing the 
runtime did was create a new (full-size) data segment, moved the stack 
there, and removed all references to the writable code segment registers. 
This helped fix a lot of bugs, because wild execution trapped instantly, 
rather than running for quite a while before crashing. It's too bad I can't 
do that on Windows, because I have some problems that I've been unable to 
debug with wild code execution -- I haven't been able to identify where it 
goes wrong.

                                   Randy.





  reply	other threads:[~2011-03-30 19:40 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-23 21:37 Pascal Calling Convention Shark8
2011-03-23 23:25 ` Yannick Duchêne (Hibou57)
2011-03-24  0:24   ` Randy Brukardt
2011-03-24  0:43     ` Yannick Duchêne (Hibou57)
2011-03-24  2:04       ` Shark8
2011-03-25 15:40         ` Yannick Duchêne (Hibou57)
     [not found]       ` <F8mdnYCca6tRJBfQnZ2dnUVZ_s-dnZ2d@earthlink.com>
2011-03-24 19:20         ` Keith Thompson
2011-03-25 16:04           ` Robert A Duff
2011-03-25 17:02             ` Hyman Rosen
2011-03-25 17:09               ` Robert A Duff
2011-03-25 17:35                 ` Hyman Rosen
2011-03-26 19:51                   ` Robert A Duff
2011-03-25 17:51             ` Keith Thompson
2011-03-26 20:46               ` Robert A Duff
2011-03-27  2:24                 ` Randy Brukardt
2011-03-28 15:41                   ` Adam Beneschan
2011-03-28 19:52                   ` Robert A Duff
2011-03-29  2:32                     ` Randy Brukardt
2011-03-29  6:06                       ` Shark8
2011-03-29 23:45                         ` Randy Brukardt
2011-03-29 19:19                       ` Robert A Duff
2011-03-30  0:02                         ` Randy Brukardt
2011-03-30 12:40                           ` Robert A Duff
2011-03-30 19:40                             ` Randy Brukardt [this message]
2011-03-30 20:56                               ` tmoran
2011-03-30 22:34                                 ` Robert A Duff
2011-03-31 21:00                                   ` Randy Brukardt
2011-03-28 20:29                 ` Hyman Rosen
2011-03-28 21:16                   ` Adam Beneschan
2011-03-28 21:26                     ` Hyman Rosen
2011-03-28 22:08                       ` Adam Beneschan
2011-03-28 23:47                         ` Georg Bauhaus
2011-03-29 12:23                           ` stefan-lucks
2011-03-29 13:10                             ` Hyman Rosen
2011-03-30 13:42                             ` Phil Clayton
2011-03-31  7:40                               ` Phil Clayton
2011-03-29  2:48                         ` Hyman Rosen
2011-03-29 18:30                           ` Robert A Duff
2011-03-29 23:25                             ` Adam Beneschan
2011-03-30 12:50                               ` Robert A Duff
2011-03-30 14:47                                 ` Adam Beneschan
2011-03-30 18:10                                   ` Robert A Duff
2011-03-29  3:01                         ` Hyman Rosen
2011-03-29 18:22                           ` Robert A Duff
2011-03-26 21:30           ` Florian Weimer
2011-03-27 16:18             ` Robert A Duff
2011-03-27 16:38               ` Florian Weimer
2011-03-27 16:56                 ` Robert A Duff
2011-03-24  2:15   ` Shark8
2011-03-24  0:38 ` ytomino
2011-03-24  2:23   ` Shark8
2011-03-24 21:29 ` Gautier write-only
2011-03-25 12:47 ` Marco
2011-03-25 15:38   ` Yannick Duchêne (Hibou57)
2011-03-26  8:39     ` ObjectAda [was: Pascal Calling Convention] Gautier write-only
2011-03-26 14:05       ` Marco
2011-03-26 21:58         ` Gautier write-only
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox