News for hackers. Stuff that matters.
Re:x86 Assembly Guide (2018) by xelxebar on Sunday April 07, 2019 @03:12AM (#19595294)
In a similar vein, on the quest of understanding yet another abstraction layer deeper, I've been trying to get to grips with how linking/loading works by writing some ELFs by hand.

Dynamic linking is giving me some problems though---I can't seem to get ld.so to do relocs for me. This is almost certainly due to some fundamental misunderstanding of mine, but I don't have the debugging tools to easily correct this.

So far I've just been using readelf and LD_DEBUG to perform basic sanity checking, but now my only idea is to walk through ld.so using gdb.

I'd be much obliged for any suggestions. Cheers!

Re:x86 Assembly Guide (2018) by urbanslug on Sunday April 07, 2019 @04:17AM (#19595531)
Hello, sorry I don't have your solution but I'm in your situation with not quite understanding linking. I have a lot of issues with linking/calling C++ and C libraries from each other or other low level languages. My background is in web stuff.

Could you please point me to the resources you used to get to your present level? Thanks :)

Re:x86 Assembly Guide (2018) by xelxebar on Tuesday April 09, 2019 @03:29AM (#19612531)
Unfortunately, I don't really have a satisfying answer for you.

I've picked up most of what I know by haphazzardly putting together information in man files, Intel manuals, and probably bits acquired over time.

That said, here's what comes to mind; first the man pages:

- ld.so(8), ldconfig(8): details about interacting with the loader

- syscall(2): gives some ABI details

- elf(5): pretty much the ELF specification

Links to books and documentation I've found helpful:

- Linkers and Loaders, by John R. Levine: https://linker.iecc.com/,

- The glibc wiki: https://sourceware.org/glibc/wiki/DynamicLoader

- The Intel x86 manuals: https://software.intel.com/en-us/articles/intel-sdm

- The OS Dev Wiki, in general, is a good resource on low-level details: https://wiki.osdev.org/Dynamic_Linker, and

- x86 Opcode and Instruction reference: http://www.ref.x86asm.net/

The last reference above isn't directly about linking, but to make sense of things like symbol relocations, you need some familiarity with instruction encoding.

Finally, Brain Raiter has a neat series of blog on his attempt at writing the smallest ELF files possible. This is what inspired me to write my own ELFs in the first place. The focus is on ELF, but there is by necessity a discussion about how linking and loading works in that context:

http://www.muppetlabs.com/~breadbox/software/tiny/

Happy hacking!