Thread overview |
---|
May 01, 2014 Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Have anybody put together some D code for reading out tables from ELF files? A range/slice based version would be nice. |
May 01, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 1 May 2014 at 11:38:50 UTC, Nordlöw wrote:
> Have anybody put together some D code for reading out tables from ELF files?
>
> A range/slice based version would be nice.
I don't know this though, in the morning Ubuntu has showed updates. One of them was "libelf" which says in its description it is used to read and write ELF files. Writing a wrapper class for this could be useful.
|
May 01, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 1 May 2014 at 11:38:50 UTC, Nordlöw wrote:
> Have anybody put together some D code for reading out tables from ELF files?
>
> A range/slice based version would be nice.
I have some simple proof of concept code. It is currently able to read elf64 (can be easily adjusted to read elf32 too) headers, extract sections and read string tables. If this is what you need, then I'll upload my code somewhere (although again, it is quite simplistic). If you specify what you need a bit more, I might be able to provide that.
|
May 01, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to yazd | > I have some simple proof of concept code. It is currently able to read elf64 (can be easily adjusted to read elf32 too) headers, extract sections and read string tables. If this is what you need, then I'll upload my code somewhere (although again, it is quite simplistic). If you specify what you need a bit more, I might be able to provide that.
Seems nice.
I need this for my file scanning/indexing engine, where I currently want to extend it to index object file symbols.
|
May 01, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to yazd | > again, it is quite simplistic). If you specify what you need a bit more, I might be able to provide that.
Please, post :)
|
May 01, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 1 May 2014 at 13:10:33 UTC, Nordlöw wrote: >> again, it is quite simplistic). If you specify what you need a bit more, I might be able to provide that. > > Please, post :) Here you go, https://github.com/yazd/elf-d. |
May 01, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to yazd | > Here you go, https://github.com/yazd/elf-d.
Thanks!
|
May 02, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Thursday, 1 May 2014 at 17:31:52 UTC, Nordlöw wrote:
>> Here you go, https://github.com/yazd/elf-d.
>
> Thanks!
Anytime. By the way, if you need more stuff out of it or help, post an issue on github. I think I'll be able to help a bit more. But if this library is to move forward, the API will need a redesign. You might want to keep that in mind.
|
May 02, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to yazd | On Friday, 2 May 2014 at 10:42:40 UTC, yazd wrote: > On Thursday, 1 May 2014 at 17:31:52 UTC, Nordlöw wrote: >>> Here you go, https://github.com/yazd/elf-d. >> >> Thanks! > > Anytime. By the way, if you need more stuff out of it or help, post an issue on github. I think I'll be able to help a bit more. But if this library is to move forward, the API will need a redesign. You might want to keep that in mind. Ok. Great! Some reflections: - This is not a robust way of detecting limitations of the package (elf.d): static assert(is(size_t == ulong), "only 64bit is supported for now"); This static assert needs to be called at run-time on the header contents of the mmapped file itself. - It is nice that you use MMFile. I do that too in my engine. However, to make cooperation more flexible and efficient class ELF should provide a ctor that takes and existing MMfile as argument (refernce) during construction, since my file engine class RegFile temporarily creates such instances when neeeded. BTW: What does package keyword mean in the line package MmFile file; inside the definition of ELF. For detail see for example: https://github.com/nordlow/justd/blob/master/fs.d#L1192 |
May 04, 2014 Re: Reading ELF Files | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | On Friday, 2 May 2014 at 15:25:55 UTC, Nordlöw wrote:
> On Friday, 2 May 2014 at 10:42:40 UTC, yazd wrote:
>> On Thursday, 1 May 2014 at 17:31:52 UTC, Nordlöw wrote:
>>>> Here you go, https://github.com/yazd/elf-d.
>>>
>>> Thanks!
>>
>> Anytime. By the way, if you need more stuff out of it or help, post an issue on github. I think I'll be able to help a bit more. But if this library is to move forward, the API will need a redesign. You might want to keep that in mind.
>
> Ok. Great!
>
> Some reflections:
>
> - This is not a robust way of detecting limitations of the package (elf.d):
>
> static assert(is(size_t == ulong), "only 64bit is supported for now");
>
> This static assert needs to be called at run-time on the header contents of the mmapped file itself.
>
> - It is nice that you use MMFile. I do that too in my engine. However, to make cooperation more flexible and efficient class ELF should provide a ctor that takes and existing MMfile as argument (refernce) during construction, since my file engine class RegFile temporarily creates such instances when neeeded. BTW: What does package keyword mean in the line
>
> package MmFile file;
> inside the definition of ELF.
>
> For detail see for example:
>
> https://github.com/nordlow/justd/blob/master/fs.d#L1192
You're correct in terms of the check. Anyway, I have just pushed some changes to support both 32bit and 64bit elf binary files. That required minor changes in the API, but it should still be easy.
And I've added a constructor that takes an MmFile.
`package` here is a protection attribute. From the documentation on dlang.org, " Package extends private so that package members can be accessed from code in other modules that are in the same package. This applies to the innermost package only, if a module is in nested packages."
|
Copyright © 1999-2021 by the D Language Foundation