Только вот в чем их отличие?
У них нет точки входа, так что их нельзя просто взять и запустить - это раз.
Два - под .dll может прятаться сборка .NET, а не классический бинарник.
И, раз это те же исполняемые файлы, можно ли сделать в начале, допустим, jmp my_function в самой dll при её импорте?
Нельзя, тк это не исполняемые файлы, а набор функций.
Каким вообще образом происходит импорт?
Динамическое связывание