[llvm-dev] Custom Binary Format Challenges

Kenneth Adam Miller via llvm-dev llvm-dev at lists.llvm.org
Sun Apr 1 11:32:14 PDT 2018


Thank you so much!

What about discovering the instruction pointer value?
Also, does anybody know how to embed an artifact as a resource in a binary?
I'd like to have two text sections, and have one copied in from another
binary.

On Sun, Apr 1, 2018 at 2:15 PM, Brenda So <sogun3 at gmail.com> wrote:

> Hi,
>
> You can write it as if you are writing an optimization pass:
> http://llvm.org/docs/ProgrammersManual.html
>
> It sounds like your highest level is a module, hence you should write a
> module pass. There is example code on LLVM Programmer's Manual on how to do
> a function pass:
>
> Function* targetFunc = ...;
> class OurFunctionPass : public FunctionPass {
>   public:
>     OurFunctionPass(): callCounter(0) { }
>
>     virtual runOnFunction(Function& F) {
>       for (BasicBlock &B : F) {
>         for (Instruction &I: B) {
>           if (auto *CallInst = dyn_cast<CallInst>(&I)) {
>             // We know we've encountered a call instruction, so we
>             // need to determine if it's a call to the
>             // function pointed to by m_func or not.
>             if (CallInst->getCalledFunction() == targetFunc)
>               ++callCounter;
>           }
>         }
>       }
>     }
>
>   private:
>     unsigned callCounter;};
>
> Making the FunctionPass a Module pass should be pretty easy with the
> linked guide. (instead of inheriting from Function Pass you can inherit
> frmo module pass) Afterwards, you can build your new pass against your LLVM
> source code and run it using the opt functionality.
>
> Hope I didn't misunderstood your question -- if you have anymore let me
> know!
>
> Brenda
>
>
>
>
>
> On Sun, Apr 1, 2018 at 1:48 PM, Kenneth Adam Miller via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hello,
>>
>>
>> I hope you are all doing well and thanks in advance. I need to program a
>> transformation of a set of llvm bitcode to have some various techniques
>> woven in. In particular, I need to resolve a given computed target address
>> to one of several in the same way that the function of a dynamic library is
>> resolved, but I need this resolution to happen in the binary target of my
>> choice where I tell it to. It's basically exactly the same facility as when
>> you compile a group of files as a shared library target. The only
>> difference is, I need this to happen under my control, according to
>> function targets that I can choose and for an argument value that I can
>> also choose as an ordinal to look them up.
>>
>> I think that I may need to write a compiler pass where this occurs but
>> part of the problem is 1) I don't know how to make such a thing occur at
>> the bitcode level, 2) and the oridinal is calculated from the instruction
>> pointer.
>>
>> Can anybody help? Is there a library or function call for calculating
>> lookup tables from a given set of targets given an ordinal? Is there a way
>> to obtain the instruction pointer in llvm bitcode?
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180401/c9b81fce/attachment.html>


More information about the llvm-dev mailing list