Ok so my mental model of how the default of the disable-aslr occurred was
flawed.

The way things currently work, the disable aslr internal flag is set if
either (1) the lldb target settings have disable-aslr set to true, or (2)
if --disable-aslr is given to the `process launch` command.

So when I tried to implement the --enable-aslr in the process launch
command, it was still seeing that the target setting for disable-aslr was
true, and so it set the disable flag even though the new process launch
setting I had cleared it earlier.

To see the target.disable-aslr setting, you can do this:
```
(lldb) settings show target.disable-aslr
target.disable-aslr (boolean) = true
```

To get the behavior of enabling ASLR, we currently just need to set the
disable-aslr target setting to false:

```
(lldb) settings set target.disable-aslr false
(lldb) settings show target.disable-aslr
target.disable-aslr (boolean) = false
```

Then we get the behavior of having ASLR enabled.

I'm not sure it really makes sense in this case to try to implement
--enable-aslr on the process launch command now that I get the flow of the
target settings, unless we change the model to do something like this:

1. If the process launch command explicitly sets --enable-aslr or
--disable-aslr, do *that*.
2. Otherwise, if the target.disable-aslr setting is true, disable ASLR.
3. Otherwise, we get the default ASLR behavior for the system.

Does that sound reasonable?  I think it makes intuitive sense.  In that
case, the options setting in the process launch command becomes a tri-state
and only if it's unresolved do we go to the target setting.

Thoughts?

-Todd


On Sat, Aug 16, 2014 at 4:44 PM, Chandler Carruth <chandl...@google.com>
wrote:

>
> On Sat, Aug 16, 2014 at 4:33 PM, Todd Fiala <tfi...@google.com> wrote:
>
>> Hey all,
>>
>> I've got Linux disabling ASLR per default as of a commit in review.  I'm
>> going to follow up with adding an --enable-aslr flag.
>>
>> Do we want to consider removing the --disable-aslr flag since disabling
>> is the default, and it is (perhaps) confusing to have the flag when it
>> currently doesn't change behavior?  I can make an argument for keeping it
>> once I add the --enable-aslr flag, but it's kinda weak.  If you don't
>> specify anything, then it is less clear what you get.  If there's only an
>> enable-aslr flag, then it's a little more clear that ASLR is disabled
>> unless you specifically ask for it.
>>
>> Thoughts?
>>
>
> For heavily scripted things like build systems and compilers, having both
> variants is useful -- you can override decisions made by one set of scripts
> by passing the override, and the last one wins.
>
> But I don't really see any way that applies to a debugger, so yea, I'm
> fine nuking it and just doing --enable-aslr to switch from the default.
>



-- 
Todd Fiala | Software Engineer | tfi...@google.com | 650-943-3180
_______________________________________________
lldb-dev mailing list
lldb-dev@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

Reply via email to