Понимание кода сборки из точки входа ядраLinux

Ответить
Anonymous
 Понимание кода сборки из точки входа ядра

Сообщение Anonymous »

Я медленно изучаю x86 сборку. Я понимаю, что есть два разных синтаксиса (Intel и AT & T). Инструкции по сборке здесь являются первыми инструкциями, которые ядра Linux использует для декомпрессии изображения и запуска Kaslr. < /P>

Код: Выделить всё

00:     leal    (BP_scratch+4)(%esi), %esp
01:     call    1f
02: 1:  popl    %edx
03:     addl    $_GLOBAL_OFFSET_TABLE_+(.-1b), %edx
04:
05:     /* Load new GDT */
06:     leal    gdt@GOTOFF(%edx), %eax
07:     movl    %eax, 2(%eax)
08:     lgdt    (%eax)
09:
0A:     /* Load segment registers with our descriptors */
0B:     movl    $__BOOT_DS, %eax
0C:     movl    %eax, %ds
0D:     movl    %eax, %es
0E:     movl    %eax, %fs
0F:     movl    %eax, %gs
10:     movl    %eax, %ss

< /code>
[list]
[*] Что проводится в $ esi < /code> в первой строке? < /li>
 Поскольку это начало новая программа, что удерживается в стеке и заскочила для хранения в %edx 
? /code>? %Eax устанавливается на %eax + 2 ? Это не следует за синтаксисом AT & T.
[*] Наконец, почему все регистры сегмента загружаются с __boot_ds постоянными?
[/list]

Подробнее здесь: https://stackoverflow.com/questions/794 ... ntry-point
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»