Как инициализировать указатель стека в ассемблере x86 на Linux [Duplicate]Linux

Ответить
Anonymous
 Как инициализировать указатель стека в ассемблере x86 на Linux [Duplicate]

Сообщение Anonymous »

Приведен пример простой программы для Assembler GNU на архитектуре i386 в Linux: < /p>
.section .data
msg: .ascii "Hi, People!\n"
len = . - msg

.section .text
.global _start

_start:
# print message
movl $4, %eax ; movl $1, %ebx ; movl $msg, %ecx ; movl $len, %edx
int $0x80
# exit to system
movl $1, %eax ; movl $0, %ebx
int $0x80
< /code>
и скомпилировать это так: < /p>
as --32 -o test test.s
ld -m elf_i386 a.out
< /code>
Интересно, следует ли инициализировать указатель стека вручную в начале, или он каким -то образом устанавливается линкером (или ОС, при загрузке эльфа)?regs: ECS, EDS, ESS:
0023 002B 002B
data segment: $msg ... esp:
080491BB FFF4D5E0
< /code>
i.e. Это похоже на точку DS и SS в том же сегменте, но если эти адреса непрерывны, этот сегмент должен быть очень большим. Извините за наивный вопрос.

Подробнее здесь: https://stackoverflow.com/questions/797 ... r-on-linux
Ответить

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

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

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

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

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