Это от metasploit, который означает, что использует один из кодов оболочки metasploit. Это - открытый исходный код, таким образом, можно пойти и захватить его: http://www.metasploit.com/
Как только изображение загружается в память, магия берет верх.
Хорошо, отвечу на свой вопрос. Это будет происходить постепенно и только для Linux (и, возможно, Mach-O). Не стесняйтесь добавлять больше вещей к своим личным ответам, чтобы они получили одобрение (и вы можете получить значки, так как теперь это CW).
Я начну на полпути и построю остальное, когда узнаю. Этот документ был создан с помощью x86_64, gcc (GCC) 4.1.2.
В этом разделе мы описываем, что происходит при вызове программы, с точки зрения ядра, пока программа не будет готова к выполнению.
_start вызывает __libc_start_main в glibc (через PLT), передавая ему следующую информацию
_init вызывается
Конечно, это просто на очень высоком и абстрактном уровне!
Executable - No Shared Libary:
Client request to run application
->Shell informs kernel to run binary
->Kernel allocates memory from the pool to fit the binary image into
->Kernel loads binary into memory
->Kernel jumps to specific memory address
->Kernel starts processing the machine code located at this location
->If machine code has stop
->Kernel releases memory back to pool
Executable - Shared Library
Client request to run application
->Shell informs kernel to run binary
->Kernel allocates memory from the pool to fit the binary image into
->Kernel loads binary into memory
->Kernel jumps to specific memory address
->Kernel starts processing the machine code located at this location
->Kernel pushes current location into an execution stack
->Kernel jumps out of current memory to a shared memory location
->Kernel executes code from this shared memory location
->Kernel pops back the last memory location and jumps to that address
->If machine code has stop
->Kernel releases memory back to pool
JavaScript/.NET/Perl/Python/PHP/Ruby (Interpretted Languages)
Client request to run application
->Shell informs kernel to run binary
->Kernel has a hook that recognises binary images needs a JIT
->Kernel calls JIT
->JIT loads the code and jumps to a specific address
->JIT reads the code and compiles the instruction into the
machine code that the interpretter is running on
->Interpretture passes machine code to the kernel
->kernel executes the required instruction
->JIT then increments the program counter
->If code has a stop
->Jit releases application from its memory pool
Как говорит routeNpingme, регистры устанавливаются внутри ЦП, и происходит волшебство!
Обновление: Да, я не могу говорите правильно сегодня!
Ну, в зависимости от вашего точного определение вы должны учитывать JIT-компиляторы для таких языков, как .Net и Java. Когда вы запускаете .Net "exe", который технически не является "исполняемым", JIT-компилятор вмешивается и компилирует его.
В Windows сначала изображение загружается в память. Ядро анализирует, какие библиотеки (читай «DLL») ему потребуются, и загружает их тоже.
Затем он редактирует образ программы, чтобы вставить адреса памяти каждой из требуемых библиотечных функций. У этих адресов уже есть пробел в двоичном файле .EXE, но они просто заполнены нулями.
Каждая процедура DllMain () каждой DLL затем выполняется одна за другой, от самой необходимой DLL до последней, как если бы зависимостей.
Как только все библиотеки были загружены и готовы, наконец, запускается образ, и все, что происходит сейчас, будет зависеть от используемого языка, используемого компилятора и самой программы.