[LLVMdev] Adding integer field to all C++ classes in LLVM

mats petersson mats at planetcatfish.com
Thu Jul 16 14:52:55 PDT 2015


Again, what are you trying to do, at a "big picture" level? What would be
the purpose of object layout randomisation?

And for sure, you have to be VERY sure that this doesn't break
compatibility with other code compiled separately from this TU.

In other words, don't break stdio.h's FILE structures, some kind of OS data
structures (or network protocols, file-system structures, xml-parser,
Open{CL,GL,GLES,VX,CV,VG} packages, binary data stored in files, etc, etc).
You can't just modify struct/class content without understanding how it
affects the rest of the system - so blindly adding something inside LLVM is
highly unlikely to work. You need some way to understand WHAT data
structures are "yours" and which ones are system/binary
compatibility-dependent and can't be changed without also changing things
elsewhere.

Also consider if there is a user-defined struct T that is declared in a
header file T.h and included in A.cpp that goes into LibA, and then
included by B.cpp that makes LibB, and then main.cpp also uses T.h and
links with LibA and LibB - the resulting struct T needs to be identical in
layout in all three places, or bad things will happen.

If I was doing this, I would probably try to either modify the files in the
project through some suitable script and/or using libclang/libtooling to
parse the relevant code and output modified source, avoiding modification
of system-files and out-of-project modules.

--
Mats

On 16 July 2015 at 22:37, Mohit Mishra <mmishra23 at gmail.com> wrote:

> HI Mats,
>
> Thanks for getting back to me.
>
>
> I take it you mean that you want to add a field to all classes COMPILED
>> by LLVM, and not all classes that LLVM consists of?
>>
> YES!
>
>>
>> Also, unless I'm terribly misinformed, adding something to an ArrayRef is
>> not going to work. ArrayRef, StringRef and such are "references to the
>> original data in the calling code", which means you have no right to modify
>> it.
>>
>
>  What I want is to be able to randomize object layout; and hence adding of
> integer fields to the classes might be a good option. While I did think so
> about ArrayRef, I thought about to substitute that with vector something
> like this:
> vector<Type*> vecType = Elements.vec ();
> vecType.insert (Type::getInt32Ty (Context))
> ST->setBody(vecType, isPacked);
>
> and modify the setBody function parameters replacing ArrayRef with the
> vector. However, I'm still skeptical about this.
>
> What do you propose to have a  fairly good object layout randomization?
>
> Best,
> Mohit.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150716/f01aef73/attachment.html>


More information about the llvm-dev mailing list